python UDP 套接字 - recvfrom 有效,但 getpeername() 给出"Transport endpoint is not connected"错误?



我在python中有一个udp服务器,我正在通过netcat -u server_ip server_port发送数据包来测试它

在udp服务器上,我可以用data,addrport = socket.recvfrom(some_number)——我可以读取接收到的数据,并使用addrport查看其他套接字的地址端口。

但是,如果我尝试在同一个变量上使用socket.getpeername(),则会出现OSError: [Errno 107] Transport endpoint is not connected错误。

是什么原因造成的?我很困惑,因为我的netcat终端在发送后没有关闭,我认为这意味着它已经连接到我的UDP套接字。

我可以用data,addrport = socket.recvfrom(some_number)接收数据包

recvfrom表示您使用的是未连接的UDP套接字,即单个套接字可以从各种源接收数据包,也可以使用sendto向各种源发送数据。相反,getpeername期望连接的套接字,即仅从单个源接收数据(使用recv而非recvfrom(并且仅发送到单个源(使用send而不是sendto(的套接字。TCP建立的套接字(accept返回的套接字(也是如此,UDP套接字也通过调用connect显式连接。

最新更新