使用套接字实现广播通信

广播消息使用UDP通信协议

1. Windows需要先调用WinSock版本,然后再创建套接字;而在Linux下可以直接创建套接字;

注意:创建UDP套接字

socket(AF_INET, SOCK_DGRAM, 0);

2.调用setsockopt()函数设置套接字;

函数说明如下:

int setsockopt(SOCKET s,int level,int optname,const char FAR *optval,int optlen);
其中,

s是需要设定的套接字;

level指明设定套接字的层次,提供SOL_SOCKET和IPPROTO_TCP两种选择;其中SOL_SOCKET是表示套接字API层次,一般用这个值;

optname指明对应level上的具体选项名;

optval一般用整数来使某个选项能/不能使用,非零值使选项可用,零值使选项不可用;

optname指明optval的长度;

为了使套接字具备广播功能,设置套接字如下:

setsockopt(mySock, SOL_SOCKET, SO_BROADCAST, (char *)&nBroad, sizeof(int)

3.设置广播地址

由于使用UDP通信,需使用sendto()函数来发送消息,而该函数需要指定目的地址。所以,设置目的地址为广播地址

IP地址则可使用INADDR_BROADCAST。该宏表示“255.255.255.255”,即可以在全局网络进行广播。据说在Linux中,该值是被禁止使用的,但实验发现是可以的。看来网上的信息不可轻信呀!(跟自己的环境有关系,最好自己试试)

端口可以自己指定(不与已有端口冲突即可)

SOCKADDR_IN broadAddr;
broadAddr.sin_family=AF_INET;
broadAddr.sin_port=htons(PORT);
broadAddr.sin_addr.S_un.S_addr=htonl(INADDR_BROADCAST);
4.广播信息的接收

跟普通UDP信息的接收相同,不赘述。

你可能感兴趣的:(C++,网络)