组播在IDLE中工作但不是独立的

时间:2015-03-11 16:44:42

标签: python windows sockets multicast

我有一个简单的网络,两台机器直接通过电缆连接(没有交换机,路由器或其他任何东西)。其中一台机器是雷达,它不断地组播图像数据。另一台机器是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内外运行脚本之间的最大区别是什么?我怎样才能让它始终有效?

1 个答案:

答案 0 :(得分:0)

正如Michele d'Amico所怀疑的,问题是防火墙配置错误。因为我没有发现自己而感到羞耻。