The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
.
google unix.com



High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
How to broadcast a message across the network using Socket programming in C?? vigneshinbox High Level Programming 1 04-06-2009 12:26 PM
Why UDP broadcast don't run? konvalo UNIX for Advanced & Expert Users 2 12-14-2008 07:43 PM
broadcast SEB UNIX Desktop for Dummies Questions & Answers 1 07-08-2003 10:40 AM
Broadcast IP Address PBNOSGT IP Networking 4 03-11-2002 09:43 PM
broadcast address 98_1LE IP Networking 1 02-06-2001 02:54 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 04-07-2009
vigneshinbox vigneshinbox is offline
Registered User
  
 

Join Date: Jan 2009
Posts: 13
Exclamation How to broadcast a message ?

My problem definition is ,I have to send a message from one node in a network and it has to be broadcasted to all other nodes in the network.The program what I have given below will be running in all the nodes in the network.The same program should be capable of sending(broadcasting) and receiving. (i.e, there is no separate program for server and client like a chat program).I have written a code but I am not clear with how it has to be done.Kindly help me in this.


Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <netinet/in.h>
#include <sys/wait.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
void sigchld_handler(int s)
{
    while (waitpid(-1, NULL, WNOHANG) > 0);
}
void *get_in_addr(struct sockaddr *sa)
{
    if (sa->sa_family == AF_INET) {
    return &(((struct sockaddr_in *) sa)->sin_addr);
    }
    return &(((struct sockaddr_in6 *) sa)->sin6_addr);
}

char pass[100];
char pass1[100];

int main()
{
    int sockfd, new_fd, numbytes;
    struct addrinfo hints, *servinfo, *p;
    struct sockaddr_storage their_addr;
    socklen_t sin_size;
    socklen_t *size;
    struct sockaddr *names;
    int yes = 1, len = 0;
    struct sigaction sa;
    char s[INET6_ADDRSTRLEN], s1[INET6_ADDRSTRLEN];
    char name[20];
    int rv;
    memset(&hints, 0, sizeof hints);
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE;
    if ((rv = getaddrinfo(NULL, "2001", &hints, &servinfo)) == -1) {
    fprintf(stderr, "getaddrinfo:%s", gai_strerror(rv));
    return 1;
    }
    printf("\n \n getaddrinfo:%d", rv);
    printf("\n------------------------------");
    for (p = servinfo; p != NULL; p = p->ai_next) {

    if ((sockfd =
         socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
        perror("server:socket");
        continue;
    }
    printf("\n server socket launched...");

    if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(int))
        == -1) {
        perror("setsockopt");
        return 0;
    }
    printf("\n server setsocket option ...");

    if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {

        close(sockfd);
        perror("server:bind");
        continue;
    }
    printf("\n socket binded....");
    break;
    }


    if (p == NULL) {
    fprintf(stderr, "server:failed");
    return 2;
    }
    if (listen(sockfd, 10) == -1) {
    perror("listen");
    return 0;
    }
    sa.sa_handler = sigchld_handler;
    sa.sa_flags = SA_RESTART;
    if (sigaction(SIGCHLD, &sa, NULL) == -1) {
    perror("sigaction");
    exit(0);
    }
    printf("\n\nlisten to socket :%d", sockfd);

    while (1) {
    sin_size = sizeof their_addr;
    new_fd =
        accept(sockfd, (struct sockaddr *) &their_addr, &sin_size);
    printf("\n sockfd=%d new_fd=%d", sockfd, new_fd);
    if (new_fd == -1) {
        perror("accept");
        continue;
    }
    if ((rv = getpeername(new_fd, names, &sin_size)) == -1)
        perror("r");
    inet_ntop(their_addr.ss_family, names, s1, sizeof s1);
    printf("\n Peer name:%s", s);
    inet_ntop(their_addr.ss_family,
          get_in_addr((struct sockaddr *) &their_addr), s,
          sizeof s);
    printf("\n\nserver:connected %s", s);
    if (!fork()) {
        while (1) {

        len = strlen("CAN_U");

        if ((send(new_fd, "CAN_U", len + 1, 0)) == -1)
            perror("error");
        if ((strcmp(pass, "bye")) == 0) {
            close(new_fd);
            break;
        }
        pass[0] = '\0';
        if (recv(new_fd, name, sizeof name, 0) == -1)
            perror("error");
        if ((strcmp("CAN_U", name)) == 0) {
            if (send(sockfd, "YES", strlen("YES"), 0) == -1)
            perror("error5");
            printf("\nSuccess");


        }

        }
        close(new_fd);

    }
    close(new_fd);
    }
    return 0;
}
I want a single program which will be running in all the nodes in a network(cluster).The program should act as server at broadcasting node and as a client at the receiving node.
Closed Thread

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 08:41 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0