=============================== 博客点滴积累,部分话语和知识点来源于网络,感谢网络资源的提供者======
socket通信术语上有三种通信方式:单播,广播,多播(也称组播),多播的IP地址是D类地址,地址范围224.0.0.0 ~239.255.255.255,这里不多说,到后面将物联网模块配网方式,会详细说明广播知识,组播知识。这里只贴代码。
对于发送组播报文,与发送其他udp报文无异,对于接收udp组播报文时,必须加入组播组才可以接收组播报文,这里用到了如下函数:
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
sockfd : 已经创建的socket描述符
level:设置什么协议(SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6)
optname:设置属性选项名字(不同协议选项不一样)
optval:属性值
optlen:长度
#define IP_ADD_MEMBERSHIP 3 /*加入一个特定的组播组*/
#define IP_DROP_MEMBERSHIP 4 /*离开一个特定的组播组*/
#define TEST_MUIT_IP "238.238.238.238"
设置加入组播,要用到的结构体如下:
typedef struct ip_mreq {
struct in_addr imr_multiaddr; /* IP multicast address of group */
struct in_addr imr_interface; /* local IP address of interface */
} ip_mreq;
mreq.imr_multiaddr.s_addr = net_inet_aton(TEST_MUIT_IP);
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));