python - 发送到未监听的ip/port时,Python的UDP崩溃

标签 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)

错误:

line 18, in data, addr = Sock.recvfrom(1024) ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

最佳答案

即使在UDP套接字上,recvfrom也会失败。例如,如果先前的发送尝试将数据包发送到没有人正在侦听端口的系统,而接收方发送回无法到达的ICMP,则可以执行此操作。

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

关于python - 发送到未监听的ip/port时,Python的UDP崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44916411/

相关文章:

sockets - ESP32 MicroPython SSL WebSocket 服务器失败

php - 数据库服务器如何自动更新

Python - 如何捕获gevent套接字超时异常

python lambda无法检测打包的模块

列表和子列表的Python算法

python - python socket.sendall 成功返回是什么意思?

python - 此输入如何与 Python 'any' 函数一起使用?

c - TCP/IP Echo 客户端挂起

c# - 到特定客户端的 TCP C# 数据包

bind - 为什么 Netty 不绑定(bind)公共(public) IP 地址,而是绑定(bind) 127.0.0.1?