如果您将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 中。如果您使用此类块捕获预期的错误,则服务器不会崩溃,但会正确处理错误。