我在 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 套接字。
uj5u.com熱心網友回復:
我可以接收資料包
data,addrport = socket.recvfrom(some_number)
recvfrom意味著您正在使用未連接的 UDP 套接字,即單個套接字可以從各種來源接收資料包并使用sendto. getpeername相反,需要一個連接的套接字,即只從單個源接收資料(使用recvnot recvfrom)并且只發送到單個源(使用sendnot sendto)的套接字。這是 TCP 已建立的套接字(由 回傳的accept套接字)以及通過呼叫顯式連接的 UDP 套接字的情況connect。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/371393.html
