//客户端代码
#include <iostream>
#include <WINSOCK2.H>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
int main()
{
WSADATA wsa;
WSAStartup(0x0202, &wsa);
SOCKET sSendSock = socket(AF_INET, SOCK_DGRAM, 0);
BOOL bBroadcast = true;
setsockopt(sSendSock, SOL_SOCKET, SO_BROADCAST,
(char *)&bBroadcast, sizeof(BOOL));
sockaddr_in siBroadcastAddr;
ZeroMemory(&siBroadcastAddr, sizeof(sockaddr_in));
siBroadcastAddr.sin_family = AF_INET;
siBroadcastAddr.sin_port = htons(4567);
siBroadcastAddr.sin_addr.s_addr = INADDR_BROADCAST;
char sz[] = "test broadcast";
while(true)
{
sendto(sSendSock, sz, strlen(sz), 0, (sockaddr*)&siBroadcastAddr, sizeof(sockaddr));
Sleep(5000);
}
}
和一般的UDP通信没太大的区别,主要区别有两点:
第一,setsockopt将socket设置支持广播通信;
第二,socket发送的目的地址为广播地址。
因此,要使用广播通信,不管是客户端还是服务器都需要支持两点,一是setsockopt设置支持广播通信,而是sendto的接收地址是广播地址。