基于udp的多播实现

关于多播的知识在下面的链接中;这里简要说一下函数部分
套接口选项
int setsockopt(int sockfd,int level,int optname,const void*optval.socklen_t optlen);

level optname 说明 optval类型
TPPROTO_TP IP_MULTICAST_LOOP 禁止多播数据回送 unsigned int
IP_ADD_MEMBERSHIP 加入多播组 ip_mreq{}
IP_DROP_MEMBERSHIP 离开多播组 ip_mreq{}

成功执行返回0,否则返回-1
1)选项IP_MULTICAST_LOOP
默认情况下,当本机发送组播数据到某个网络接口时 在IP层,数据会回送到本地的回环接口,选项IP_MULTICAST_LOOP用于控制数据是否回送到本地的回环接口
例如: 参数loop设置为0禁止回送 设置为1允许回送
注意:对于loop应当先初始化 在对其进行取地址操作
例如:
int loop=1;//将其设为1,然后在下面的函数对去取地址
setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizof(loop));
2)选项IP_ADD_MEMBERSHIP和IP_DROP_MEMBERSHIP
加入或者退出一个多播组,通过选项IP_ADD_MEMBERSHIP和IP_DROP_MEMEBERSHIP,对于一个结构struct ip_mreq类型的变量进行控制
struct ip_mreq原型如下:
struct in_addr{
in_addr_t s_addr;
}
struct ip_mreq{
struct in_addr imn_multiaddr;//多组播IP,类似于QQ群号
struct in_addr imr_interface;//将要添加到多播组的IP,类似于QQ成员号
};
实现代码:亲测可用:

基于udp的多播实现_第1张图片
基于udp的多播实现_第2张图片
对于广播端:
基于udp的多播实现_第3张图片
转自

你可能感兴趣的:(学生)