UDP – Broadcast
UDP broadcast is a technique that allows sending UDP datagram from a single source to all computers in a LAN. In order to send a UDP datagram addressed to all computers in the local area network it needs to be sent to a special address called the Broadcast address. The broadcast address for a LAN is either the highest address in the local subnetwork or the universal broadcast address: 255.255.255.255. In order to receive broadcast messages the receiver needs to enable SO_BROADCAST option on the socket (see bellow)
UDP Broadcast
Sender |
UDP Receiver |
#include"winsock2.h" #include<iostream> #include<conio.h> using namespace std; #define MYPORT 9009 // the port users will be connecting to int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); SOCKET sock; sock = socket(AF_INET,SOCK_DGRAM,0); char broadcast = '1'; if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&broadcast,sizeof(broadcast)) <
0) { cout<<"Error in setting Broadcast option"; closesocket(sock); return 0; } struct sockaddr_in Recv_addr;
struct sockaddr_in Sender_addr; int len = sizeof(struct sockaddr_in); char sendMSG[] ="Broadcast
message from SLAVE TAG"; char recvbuff[50] = ""; int recvbufflen = 50; Recv_addr.sin_family = AF_INET; Recv_addr.sin_port = htons(MYPORT); // Recv_addr.sin_addr.s_addr = INADDR_BROADCAST; // this isq equiv to
255.255.255.255 // better use subnet
broadcast (for our subnet is 172.30.255.255) Recv_addr.sin_addr.s_addr = inet_addr("172.30.255.255"); sendto(sock,sendMSG,strlen(sendMSG)+1,0,(sockaddr
*)&Recv_addr,sizeof(Recv_addr));
recvfrom(sock,recvbuff,recvbufflen,0,(sockaddr
*)&Recv_addr,&len); cout<<"\n\n\tReceived message from Reader is => "<<recvbuff; cout<<"\n\n\tpress any key to CONT..."; _getch(); closesocket(sock); WSACleanup(); } |
#include"winsock2.h" #include<iostream> #include<conio.h> using namespace std; #define MYPORT 9009 // the port users will be connecting to int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); SOCKET sock; sock = socket(AF_INET,SOCK_DGRAM,0); char broadcast = '1'; // This option is needed on the socket in order to be able to
receive broadcast messages // If not set the receiver will not receive
broadcast messages in the local network. if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&broadcast,sizeof(broadcast)) <
0) { cout<<"Error in setting Broadcast option"; closesocket(sock); return 0; } struct sockaddr_in Recv_addr;
struct sockaddr_in Sender_addr; int len = sizeof(struct sockaddr_in); char recvbuff[50]; int recvbufflen = 50; char sendMSG[]= "Broadcast
message from READER"; Recv_addr.sin_family = AF_INET; Recv_addr.sin_port = htons(MYPORT); Recv_addr.sin_addr.s_addr = INADDR_ANY; if (bind(sock,(sockaddr*)&Recv_addr, sizeof (Recv_addr)) <
0) { cout<<"Error in BINDING"<<WSAGetLastError(); _getch(); closesocket(sock); return 0; }
recvfrom(sock,recvbuff,recvbufflen,0,(sockaddr
*)&Sender_addr,&len); cout<<"\n\n\tReceived Message is : "<<recvbuff; cout<<"\n\n\tPress Any to send message"; _getch(); if(sendto(sock,sendMSG,strlen(sendMSG)+1,0,(sockaddr
*)&Sender_addr,sizeof(Sender_addr)) < 0) { cout<<"Error in Sending."<<WSAGetLastError(); cout<<"\n\n\t\t Press any key to continue...."; _getch(); closesocket(sock); return 0; } else cout<<"\n\n\n\tREADER sends the broadcast message
Successfully"; cout<<"\n\n\tpress any key to CONT..."; _getch(); closesocket(sock); WSACleanup(); } |