如何设置直接接收的组播地址

时间:2016-07-14 04:56:43

标签: python sockets networking multicast

我有一台服务器(在Windows 10上运行)和客户端(在Raspbian上运行)相互通信,我在从客户端设备接收组播数据时遇到问题。

我相信我已经在我的服务器上隔离了这个问题。问题是当我在我的服务器上设置接收套接字时,套接字只接收来自它的组播数据,只有IP地址,即使我已将其配置为这样做,也不会添加组播地址。目前我用来设置接收套接字的代码是......

def _init_recv_socket(self):
    self.recieve_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
    self.recieve_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    self.recieve_socket.bind(('', MCAST_PORT))
    mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
    self.recieve_socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

我在线阅读使用socket.INADDR_ANY是危险的,因为它不会始终设置为正确的界面。我打电话了

print socket.gethostbyname_ex(socket.gethostname())

它显示我收到的地址,但未显示我的多播地址。输出是:

('MSI', [], ['192.168.99.1])

我在网上找到了如何设置多播和接口地址只获得相同的输出:

group = socket.inet_atons(MCAST_GRP)
iface = socket.inet_atons('192.168.99.1')
self.recieve_socket.setsocketopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, group+iface)

运行gethostbyname命令时,我的多播仍未显示。

我卡住了,不知道如何让我的服务器工作以接收多播数据...

注意:相同的代码在我的覆盆子pi上工作正常,而不是在我的窗户上。

0 个答案:

没有答案