How to broadcast a message ?


 
Thread Tools Search this Thread
Top Forums Programming How to broadcast a message ?
# 1  
Old 04-07-2009
Error 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.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Broadcast on AIX

hello how to disable brodcast from AIX 5.3 ? user get on workstation massage from root thx (3 Replies)
Discussion started by: ariec
3 Replies

2. Solaris

broadcast message from unix server

we enabled windows firewall and noticed that one unix sun server (solaris 9 ) are broadcasting on UDP port 14000 continous. We are running Oracle Application on this server, so I'm not sure if there is some service doing this, or any idea how to trace . Regards (1 Reply)
Discussion started by: maooah
1 Replies

3. Shell Programming and Scripting

How to broadcast the message if any condition meets

Hi All, Can any1 help me out in broadcasting a message to all users if a condtion is meet. Like I am trying to get values from a directory for service monitoring. If a condition is meet it should broadcast the message. I try to use wall command but i m not sure how its works as its... (1 Reply)
Discussion started by: jojo123
1 Replies

4. Red Hat

[help] how to send wall/broadcast message to all clients

Hi, as per title, please help me.. I use command wall host1 host2 hellowwwww but it only receive in the host1.. how can I send this to all the clients.. I want this 1 server to send to all the clients.. or is there any program that I can use? I know this openfire, but seems complicated since... (5 Replies)
Discussion started by: flekzout
5 Replies

5. Programming

How to broadcast a message across the network using Socket programming in C??

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.... (1 Reply)
Discussion started by: vigneshinbox
1 Replies

6. UNIX Desktop Questions & Answers

broadcast

Can anybody hellp me troubleshoot this error. Using HP-Uxix B.10.X " *****ARPA/9000 NETWORKING***** Mon Jun 30 SAT 2003 20:18:12.xxxxxxx DISASTER Subsys: NS_LS_PROBE LOC:01001 Network NS_LS_PROBE DISASTER 1001, pid arp: ether address is broadcast for IP address zzzzzzz! " where... (1 Reply)
Discussion started by: SEB
1 Replies

7. Programming

How to broadcast in Unix machine

How can I broadcast in a lonely Unix machine . One process can inform other processes in the same machine that something happened . Do not inform these processes one after another in a loop.You should inform other process whthin only one instuction. (1 Reply)
Discussion started by: chenhao_no1
1 Replies

8. UNIX for Dummies Questions & Answers

broadcast email???

Hi all, How can i send email to all the users on a box? Thank you all (1 Reply)
Discussion started by: solvman
1 Replies

9. IP Networking

broadcast address

What is the significance of the broadcast address? (1 Reply)
Discussion started by: 98_1LE
1 Replies
Login or Register to Ask a Question