广播通信
像ARP地址解析协议和DHCP动态主机设置协议都会使用到UDP中的广播通信方式,这些客户端在启动时,会在第一时间以广播的形式向所在网络子网送报文。
这里给出DHCP协议流程,用于辅助学习,其流程图如下:
想要进行广播通信,必须知道广播地址才可以。在IP地址中,如果最后一位数组是255,则该地址一定是广播地址,形如192.168.0.255
,常见的广播地址有以下两种:
-
受限广播地址
以
255.255.255.255
组成的广播地址,我们在代码中可以使用htonl(INADDR_BROADCAST)
获取该地址;在当前路由器均不转发此类广播地址。 -
子网广播地址
子网广播地址是一种常用的广播方式,它是指在一个具体的子网内进行广播.
比如192.168是网络ID,则
192.168.1.255
是其某一个子网的广播地址或192.168.255.255
是其全部子网的广播地址。
广播通信实现
广播通信需要采用UDP协议来实现,我们采用受限广播地址进行通信,其客户流程如下:
核心代码:
//默认的套接字描述符sock是不支持广播,必须设置套接字描述符以支持广播
int so_broadcast = 1;
setsockopt(socketClient, SOL_SOCKET, SO_BROADCAST, (const char*)&so_broadcast,sizeof(so_broadcast));
//填充服务器socket信息
SOCKADDR_IN addrServer;
addrServer.sin_family = AF_INET;
//服务器的应用程序端口
addrServer.sin_port = htons(6000);
//服务器的IP地址,INADDR_BROADCAST代表255.255.255.255 是广播
addrServer.sin_addr.S_un.S_addr = htonl(INADDR_BROADCAST);
//以下是数据收发流程实现,查看git源代码
源码路径:
https://github.com/jinxiang1224/cpp/tree/master/project/vs2008/src/UDPClient
参考文章:
https://www.cnblogs.com/coder2012/archive/2013/04/02/2995889.html