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


 
Thread Tools Search this Thread
Top Forums Programming How to broadcast a message across the network using Socket programming in C??
# 1  
Old 04-06-2009
Error 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. (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)
{
//printf("\n enter the text to the client:");
//gets(pass);
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;
}

# 2  
Old 04-06-2009
Thank you for using code tags.

First off, you're using a stream socket, not a datagram(i.e. UDP) socket. UDP sockets let you send to(and receive from) arbitrary destinations and ports at any time without making any connections, with the caveat you can only send packets up to about 1 kilobyte at a time.

Once you've made a datagram socket, you can just send to the IP address INADDR_ANY to broadcast.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell script to give broadcast and network address

Hello, I am running a post script in autoyast where I am trying to set the broadcast and network address. I have the ip address and netmask already (reading from a file).. I saw the post from fpmurphy but it is using ksh which isn't an option in autoyast. Thanks in advance! (3 Replies)
Discussion started by: bloodclot
3 Replies

2. Programming

Receiving broadcast packets using packet socket

Hello I try to send DHCP RENEW packets to the network and receive the responses. I broadcast the packet and I can see that it's successfully sent using Wireshark. But I have difficulties receiving the responses.I use packet sockets to catch the packets. I can see that there are responses to my... (0 Replies)
Discussion started by: xyzt
0 Replies

3. 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

4. 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

5. 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

6. Programming

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

7. Shell Programming and Scripting

network and broadcast address

Hi Suppose You have two computers. One named kenny which has an IP address of 192.168.0.7. kenny lives on a subnet with a subnet mask of 255.255.255.240. The second computer is called zathras, which has an IP address of 192.168.0.17, zathras lives on a network with the same subnet mask. i)... (4 Replies)
Discussion started by: scofiled83
4 Replies

8. Programming

Socket Programming

Hi , I'm facing the following problem in socket programming. My structure is struct { int i; char *str; }samp; I'm creating the pointer to this structure and assigning the value to the structure members and send via the socket to the another process. The receiver process when... (7 Replies)
Discussion started by: arunviswanath
7 Replies

9. IP Networking

socket programming

my system is a stand alone system... i want to try doing socket porgramming..ihave heard that this is usually done during testing... how can i do that....? (6 Replies)
Discussion started by: damn_bkb
6 Replies

10. Programming

Socket Programming socket

Hello, I actually try to make client-server program. I'm using SCO OpenServer Release 5.0.0 and when I try to compile my code (by TELNET) I've got this error : I'm just using this simple code : and I get the same error if I use : If someone can help me, Thanks (2 Replies)
Discussion started by: soshell
2 Replies
Login or Register to Ask a Question