簡體   English   中英

UDP套接字sendto()函數

[英]UDP socket sendto() functions

如果我想在我的udp套接字上寫這樣的話,我會收到錯誤。 根據文件,應該沒有問題。 我不明白為什么bind()以相同的方式運行良好但sendto()失敗。

udp_port = 14550
udp_server  = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_server.bind(('127.0.0.1', udp_port))
udp_clients = {}

錯誤:

udp_server.sendto('', ('192.0.0.1', 14550) )
socket.error: [Errno 22] Invalid argument

錯誤表明您的參數無效。 在閱讀您的代碼時,我可以說違規的參數是IP地址:

  • 您將套接字綁定到127.0.0.1
  • 您嘗試將數據發送到另一個網絡上的 192.0.0.1

如果要將數據發送到IP地址為192.0.0.1的主機,請將套接字綁定到同一網絡上的本地網絡接口,或者綁定到可以找到到192.0.0.1的路由的網絡上

我有一個(私有)本地網絡在192.168.56.* ,如果我將套接字綁定到192.168.56.x (x是本地地址),我可以發送數據到192.168.56.y (y是該地址的服務器); 但如果我綁定到127.0.0.1我會得到IllegalArgumentException

您的綁定調用不應綁定到環回地址。 試着這樣做:

udp_server.bind(('0.0.0.0', udp_port))

客戶:

sock_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_client.sendto("message", ("127.0.0.1", 4444))

服務器:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("127.0.0.1", 4444))
while(1):
    data, addr = sock.recvfrom(1024)
    print "received:", data

這段代碼有效。 Python的2.7。

您似乎混合了客戶端和服務器套接字,地址或子網。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM