发送到没有收听的ip / port时,Python的UDP崩溃了

时间:2017-07-05 03:03:51

标签: python sockets server crash udp

如果你将一个UDP数据包发送到一个没有监听的随机ip /端口,python会关闭发送它的服务器(导致崩溃)?

我做错了什么还是这个错误?

问题示例:

import socket

# Launch the server
try:
    Sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    Sock.bind(("127.0.0.1", 25565))
except:
    print("Failed to launch server")

# Send a packet to a random (closed) place
# Comment out this line to prevent error
Sock.sendto(b'', ("127.0.0.1", 4623))


while True:
    # Wait for data
    print("Listening for data")
    data, addr = Sock.recvfrom(1024)

错误:

  

第18行,在       data,addr = Sock.recvfrom(1024)   ConnectionResetError:[WinError 10054]远程主机强制关闭现有连接

1 个答案:

答案 0 :(得分:1)

即使在UDP套接字上,

recvfrom也可能失败。例如,如果先前的发送尝试将数据包发送到没有人在端口上侦听并且接收方发回ICMP不可达的系统,则可以这样做。

您的服务器只会崩溃,因为您不希望recvfrom失败,即没有像使用bind那样将其包装到try-block中。如果使用此阻止捕获预期错误,服务器将不会崩溃但正确处理错误。