我是python的新手,我的第一个程序是编写接收组播数据包的代码.
我得到了这个代码,例如各地的类似代码.
import socket import struct sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('', 4242)) mreq = struct.pack("=4sl", socket.inet_aton("224.51.105.104"), socket.INADDR_ANY) sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) while True: print sock.recv(10240)
我无法弄清楚这段代码.特别是4sl部分
阅读的struct
模块文档.
=
表示本机字节顺序,标准大小,没有对齐.4s
表示"四个字母的字符串"(四个字符串连接成一个字节串),l
表示"签名长",在这种情况下是一个四字节的int.
至于其余的代码,这是设置一个绑定到端口4242的多播udp监听mreq
器.这个结构(C代码):
struct ip_mreq { struct in_addr imr_multiaddr; /* IP multicast address of group */ struct in_addr imr_interface; /* local IP address of interface */ };
此代码存储该数据mreq
,传递给setsockopt
该操作系统以通知操作系统您对该多播地址中的数据感兴趣.
谷歌搜索发布了关于IP多播的本教程.