【发布时间】:2012-12-21 12:25:26
【问题描述】:
我目前有以下接收多播数据的代码。
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', 24003))
mreq = struct.pack("=4sl", socket.inet_aton("238.210.10.1"), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
我有两个网卡,但代码只监听发送到 127.0.0.1 的消息。如何收听任何网卡上的所有多播消息?无需对它们进行硬编码。
【问题讨论】:
-
尝试使用线程或 Twisted 框架?
-
Python
selectmodule 允许您在多个套接字上等待输入。我同意 Twisted 会很好,但我推荐select超过线程。 -
@RandomDownvoter 关心解释否决票?所以我可以尝试改进问题。
-
@ahenderson 它一定是问题正文中措辞正确的标题、准确的标记或完整的英文
-
@japreiss:当您不需要在连接之间共享任何数据时,线程会简单得多,但当您这样做时,线程会简单得多。因此,除非您需要处理数千个连接,否则这是最好的决定因素。 (如果您确实需要处理数千个连接,则不能使用线程……但此时,您可以考虑
gevent,它实际上具有相同的简单性权衡。)
标签: python sockets networking multicast