查看全文
组播的socket套接字选项是IPPROTO_IP(level),IP_ADD_MEMBERSHIP(option),ip_mreq(value)
从/usr/include/linux/in.h中查到ip_mreq的结构为
struct ip_mreq
{
struct in_addr imr_multiaddr; /* IP multicast address of group */
struct in_addr imr_interface; /* local IP address of interface */
};
而在python中没有对应的类型,所以要用struct来构造一个
首先将struct import进来,然后使用struct.pack将两个地址进行打包,返回值即可作为setsockopt的值参数
mreq=struct.pack("4sl",inet_aton("224.0.0.123"),INADDR_ANY)
s.setsockopt(IPPROTO_IP,IP_ADD_MEMBERSHIP,mreq)
然后要将设置这个选项,告诉服务器要往Internet上组播,<32的值表示在局域网内,>32表示往互联网上发
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255)
遗憾的是,组播还需要路由设备的支持,实际支持情况并不乐观。
全部代码如下:
服
查看全文
评论