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

python UDP socket - recvfrom works, but getpeername() gives "Transport endpoint is not connected" error?

我在 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 套接字。

I can receive the packets with data,addrport = socket.recvfrom(some_number)

recvfrom 表示您正在使用未连接的 UDP 套接字,即单个套接字可以从各种来源接收数据包并使用 sendto 将数据发送到各种来源的情况。 getpeername 而不是期望一个已连接的套接字,即只从单个源接收数据(使用 recv 而不是 recvfrom)并且只发送到单个源(使用 send不是 sendto)。这是 TCP 建立的套接字(由 accept 返回的套接字)的情况,也是通过调用 connect.

显式连接的 UDP 套接字的情况。