我有一个简单的网络,两台机器直接通过电缆连接(没有交换机,路由器或其他任何东西)。其中一台机器是雷达,它不断地组播图像数据。另一台机器是Windows PC,我想在那台机器上接收数据。
对于第一个测试,我有一个简单的Python脚本:
import socket
MULTICAST_GROUP = '239.0.17.8'
PORT = 6108
LOCAL_IF = '192.168.3.42'
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(1.0)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((LOCAL_IF, PORT))
sock.setsockopt(
socket.IPPROTO_IP,
socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(MULTICAST_GROUP) + socket.inet_aton(LOCAL_IF)
)
while True:
try:
data, address = sock.recvfrom(64*1024)
except socket.timeout:
print 'timeout'
else:
print address, len(data)
如果我从IDLE运行它,它可以正常工作。但是,如果我独立运行它(从命令提示符,或在资源管理器中双击),它不会收到任何数据;它只会每秒打印一次“超时”。
我一直在寻找Wireshark输出来试图找到差异,但我没有找到。相同的数据到达,发送相同的成员资格请求(成员资格实际发送两次;这是正常的吗?)。
数据报非常大(29504字节);这可能是个问题吗?
在IDLE内外运行脚本之间的最大区别是什么?我怎样才能让它始终有效?
答案 0 :(得分:0)
正如Michele d'Amico所怀疑的,问题是防火墙配置错误。因为我没有发现自己而感到羞耻。