Python 3.x Python2 socket.recvfrom()/recv()LInux和Windows之间的差异?

Python 3.x Python2 socket.recvfrom()/recv()LInux和Windows之间的差异?,python-3.x,python-2.7,sockets,networking,Python 3.x,Python 2.7,Sockets,Networking,通过调用bind()并通过recvfrom()接收消息,我可以成功地在Ubuntu 20.04中接收数据包。然而,切换到Windows似乎打破了这一点。清除防火墙问题后,我可以在Python 3.9中成功接收数据包,但在Python 2.7中仍然无法接收数据包(我当前的程序正在使用它)。在Python2.7中运行时,它似乎挂起了recv()/recvfrom()调用,直到我终止它。2.7和3.9在Ubuntu中运行良好,所以我似乎只在Windows上的Python2.7中遇到了这个问题 更新:我

通过调用
bind()
并通过
recvfrom()接收消息,我可以成功地在Ubuntu 20.04中接收数据包。然而,切换到Windows似乎打破了这一点。清除防火墙问题后,我可以在Python 3.9中成功接收数据包,但在Python 2.7中仍然无法接收数据包(我当前的程序正在使用它)。在Python2.7中运行时,它似乎挂起了
recv()
/
recvfrom()
调用,直到我终止它。2.7和3.9在Ubuntu中运行良好,所以我似乎只在Windows上的Python2.7中遇到了这个问题

更新:我不认为IP地址和端口很重要,因为代码在使用Python 3的Ubuntu和Windows上运行得非常好。我还没有访问服务器端的代码,但希望以后能更新。我所知道的是,董事会正在广播到特定的端口和IP地址,我已绑定到下面

recv_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
recv_socket.bind(("192.168.11.149", 5155))
data = recv_socket.recv(1024) 
print(data)
我故意连接到特定的IP,而不是接受所有IP地址。该IP也是我的Ubuntu和Windows操作系统(在同一台机器上)上的ifconfig/ipconfig中显示的正确IP,因为我是通过该特定端口硬连线到主板的

Windows和Ubuntu之间是否有我所缺少的行为变化?或者在Python2.7和Python3.9之间进行更改,这将导致调用像这样冻结?

没有更改,但是给出一个实际的客户机和服务器代码中断的示例将大大有助于找到您看到的行为的答案

下面是在Python2和Python3中工作的代码。客户机和服务器不必是同一版本的Python

server.py

from\uuuuu future\uuuuu导入打印功能
导入套接字
recv_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
接收插座绑定(“”,9999))
尽管如此:
数据,addr=recv_socket.recvfrom(1024)
打印(地址“->”,报告(数据))
client.py

导入套接字
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s、 发送到(b'hello',('localhost',9999))

您要绑定到哪个IP地址?您要广播到哪个IP地址?换句话说,当我绑定到IP/端口时,创建一个@user207421,它与消息广播到的IP/端口相同。我已更新代码以显示IP和端口。将UDP数据报发送到192.168.11.149不是广播。这是单播。除非您知道自己在做什么,否则通常应该绑定到0.0.0.0。除非您的Windows和Linux共同驻留在同一主机上,否则其IP地址必须不同。@user207421这是公平的;我将编辑以更正措辞。在这种情况下,0.0.0.0将完成同样的事情,尽管我并不十分担心安全风险,但我也不认为它会对任何事情产生什么影响。它在Linux上运行相同的程序,在Windows上没有解决这个问题。Windows和Linux在同一台机器上运行,if/ipconfig显示两者都为192.168.11.149(至少在我连接的以太网端口上)。我已经更新了示例的客户端,以列出IP和端口。我希望很快看到代码的服务器端。有没有一种编写服务器端的方法可以在Ubuntu的Python2.7中运行良好,但不能在Windows中运行?