使用windows 2012服务器接收器的python多播失败

使用windows 2012服务器接收器的python多播失败,python,multicast,windows-server-2012,Python,Multicast,Windows Server 2012,windows 2012服务器上运行的Python多播接收器未获得udp通信。我检查了流量,发现udp流量正在出现。我有一个允许边缘遍历的多播组的防火墙udp规则。我没有防火墙阻止事件。同样的代码也适用于windows 2008服务器客户端 在服务器上(linux ubuntu): 在客户端(windows 2012服务器)上: 注意:上面的代码在Windows2008Server上工作。在做了一些搜索之后,我发现在绑定到错误地址时存在一些问题(以及针对绑定到“”的必要建议)。在windows客

windows 2012服务器上运行的Python多播接收器未获得udp通信。我检查了流量,发现udp流量正在出现。我有一个允许边缘遍历的多播组的防火墙udp规则。我没有防火墙阻止事件。同样的代码也适用于windows 2008服务器客户端

在服务器上(linux ubuntu):

在客户端(windows 2012服务器)上:

注意:上面的代码在Windows2008Server上工作。在做了一些搜索之后,我发现在绑定到错误地址时存在一些问题(以及针对绑定到“”的必要建议)。在windows客户端上检查传入的udp通信时,我看到了多播通信,但Receiver没有得到它

看完后我试了一下。这也不起作用

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
grp = socket.inet_aton(mc_group)
ip = socket.gethostbyname(socket.gethostname())
iface = socket.inet_aton(ip)
mreq = grp + iface

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
sock.bind((ip, PORT))

有人成功地在windows 2012 server上实现了receiver吗?

我更新了另一篇文章中的响应,使其更加明确。使用socket.gethostbyname()仍将获得默认接口,因此您必须使用
socket.gethostbyname\u ex()
获得扩展列表,然后选择所需的接口

请看一下区别:

socket.gethostbyname(socket.gethostname())
# "169.254.80.80"
socket.gethostbyname_ex(socket.gethostname()) 
# ("PCName", [], ["169.254.80.80", "192.168.1.10"])
在上面的示例中,我们希望跳过第一个169.254链路本地地址,并选择所需的192.168.1.10地址。如果在上面的示例中使用了
socket.gethostbyname()
,则会选择链接本地(169.254.*)地址,并且代码不会做太多工作

socket.gethostbyname_ex(socket.gethostname())[2][1]
# "192.168.1.10"
socket.gethostbyname(socket.gethostname())
# "169.254.80.80"
socket.gethostbyname_ex(socket.gethostname()) 
# ("PCName", [], ["169.254.80.80", "192.168.1.10"])
socket.gethostbyname_ex(socket.gethostname())[2][1]
# "192.168.1.10"