为什么python会在udp recvfrom上引发异常

时间:2016-01-07 03:18:46

标签: python windows python-2.7 sockets udp

我在Windows10上有简单的python27脚本

它只是使用udp socket发送消息并等待回复

import socket

UDP_IP = "127.0.0.1" 
UDP_PORT = 5005
MESSAGE = "Hello, World!"

print "UDP target IP:", UDP_IP
print "UDP target port:", UDP_PORT
print "message:", MESSAGE

sock = socket.socket(socket.AF_INET, # Internet
                 socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
sock.recvfrom(1200)

在Windows 10上,它会引发异常

Traceback (most recent call last):
File "simple.py", line 14, in <module>
print sock.recv(1200)
socket.error: [Errno 10054]

在Linux上运行正常。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

你的程序的前几行是打开一个套接字来发送一切都很好的数据。但是sock.recvfrom行没有与之关联的绑定。

换句话说,当您发送UDP时,您不应该期望收到任何回复。如果要发送消息然后等待回复(远程系统不会自动回复),则需要将套接字绑定到侦听端口。

此网站:https://wiki.python.org/moin/UdpCommunication有一些很好的参考资料。

答案 1 :(得分:0)

我在这里找到了解决方案Windows UDP sockets: recvfrom() fails with error 10054作者也这样做了。他忽略了这个错误。但也许这是解决这个问题的真正方法。 我只是将recvfrom放入while并将其与try..except包裹在一起 我忽略了任何错误。它对我有用