我在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
显式连接。