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(); } |