过一会儿,多播UDP停止接收

时间:2018-11-11 15:25:24

标签: python python-3.x raspberry-pi udp multicast

我正在尝试使Raspberry(在Raspbian上)接收UDP多播消息。我在Python 3中使用以下代码:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("239.0.0.1", 22700))
mreq = struct.pack("4sl", socket.inet_aton("239.0.0.1"), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

while True:
    data = sock.recv(32).decode("utf8")
    # Do stuff with the received data

此代码工作正常,我正在接收所需的数据包,但过一会儿(通常是5分钟)后,sock.recv(32)被卡住了,什么也没收到。完全相同的代码可以在我的计算机上正常工作,现在已经运行了一个多小时,可以接收所有数据包。

有人在树莓上遇到这个问题吗? 预先感谢

1 个答案:

答案 0 :(得分:0)

这听起来像是典型的IGMP问题。这些问题是常见。典型的模式是,一切正常运行,一段时间后停止运行。

沿该路径的某些路由器或交换机停止传输多播数据包。在路由器中查找选项以启用/禁用IGMP监听,并可能启用/禁用不同的IGMP版本。尝试使用其他开关。避免使用外部硬件(例如PowerLine适配器)。