【发布时间】:2010-07-06 02:44:13
【问题描述】:
以下是简单的 IPv4 UDP 广播,然后监听所有接口。
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
sock.bind(("", 1337))
sock.sendto("hello world", ("255.255.255.255", 1337))
while True:
data, addr = sock.recvfrom(0x100)
print "received from {0}: {1!r}".format(addr, data)
我想调整它以发送和接收 IPv4 和 IPv6。
我已经尽可能多地浏览并阅读,并相信以下大致是我需要采取的路线:
- 创建 IPv6 套接字。
- 将套接字添加到链接或站点本地多播组。
- 将 UDP 数据包发送到正在使用的组的多播地址。
我得到的更多信息是我可能需要绑定到多个接口,并使用setsockopt() 告诉套接字它也应该接收多播数据包。最后,getaddrinfo() 可用于在 IPv6 不可用的情况下优雅地“退回”到 IPv4。
我已经实现了很多,但主要是在多播部分上偶然发现。最好有完整的 Python 代码示例,或对所需常量和地址的生动描述。
【问题讨论】:
标签: python udp posix ipv6 multicast