Python 的 UDP 在发送到未侦听的 ip/port 时崩溃



如果您将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( 连接重置错误: [WinError 10054] 远程主机强行关闭了现有连接

即使在UDP套接字上,recvfrom也可能失败。例如,如果上一个发送尝试将数据包发送到没有人侦听端口的系统,并且接收方发回无法访问的 ICMP,则可以执行此操作。

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

最新更新