You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python UDP socket调用recvfrom正常但getpeername报传输端点未连接错误原因

错误原因说明

UDP是无连接传输层协议,不存在TCP握手建连、内核维持连接状态的设计,这是报错的核心原因,具体细节如下:

  • socket.getpeername()接口仅支持在已连接状态的套接字上调用:TCP场景下是完成三次握手的套接字,UDP场景下只有手动调用过socket.connect(对端地址端口)、内核为套接字绑定了固定对端地址后,才符合调用条件。
  • 你调用recvfrom()拿到的addrport,只是内核从当前收到的UDP报文头部解析出的源地址、源端口字段,仅属于单报文的属性,不会修改本地UDP套接字的状态,所以套接字始终处于未连接状态,调用getpeername()自然会抛出OSError: [Errno 107] Transport endpoint is not connected错误。
  • 你使用netcat -u发报文的行为也不会建立连接,netcat只是把封装了源目地址端口的UDP报文发往服务端,没有任何建连动作。

如果需要让UDP套接字支持getpeername()调用,可以在首次收到报文后执行socket.connect(addrport),将该套接字和对应对端绑定即可,但绑定后该套接字只能和这一个对端收发数据,无法再接收其他地址发来的UDP报文。

内容的提问来源于stack exchange,提问作者cdpp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:15:02