我有一台服务器(在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上工作正常,而不是在我的窗户上。