[英]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.