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 套接字的情况。
我在 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
.