Python多播数据包接收器在连接WiFi时停止接收多播数据包

1 投票
0 回答
20 浏览
提问于 2025-04-11 23:39

首先,抱歉我用的术语可能不太专业,因为我没有计算机科学的背景,非常感谢大家的帮助!

我正在用Python制作一个简单的多播接收器,这个接收器通过以太网连接从电梯控制服务器接收单播、多播和广播的数据包。但我遇到了一个奇怪的问题:

当我的电脑连接到WiFi时,多播数据包就收不到了,而单播和广播的数据包却没问题。我用Wireshark监控以太网连接,发现多播数据包仍然在发送,只是我的接收器没有收到和显示这些数据包。

我在WiFi开启时用Wireshark监控WiFi连接,发现我的设备向路由器发送了数据包,使用的是IGMPv2协议,源IP是我的设备IP,目标IP是我接收器代码中指定的多播IP地址。

所以我在想,当WiFi连接时,我的设备和路由器之间的传输是否会影响我的接收器接收多播数据包?

对于接收器,我基本上是用这个解决方案中的代码: 如何在Python中进行UDP多播?

import socket
import struct

MCAST_GRP = '239.64.0.2'
MCAST_PORT = 52000
IS_ALL_GROUPS = True

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if IS_ALL_GROUPS:
    # on this port, receives ALL multicast groups
    sock.bind(('', MCAST_PORT))
else:
    # on this port, listen ONLY to MCAST_GRP
    sock.bind((MCAST_GRP, MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

while True:
  # For Python 3, change next line to "print(sock.recv(10240))"
  print sock.recv(10240)

我尝试用Wireshark监控以太网和WiFi连接的数据包传输,我推测连接到WiFi可能会阻止端口和多播地址的绑定。不过我对此并不确定,请大家指正和启发我。

0 个回答

暂无回答

撰写回答