我有一個非常標準的udp數據包簡單的演示,但我試圖發送到另一個IP地址時出現錯誤,我不明白爲什麼。發送UDP從一臺計算機到另一個在python
socketerror: [Errno 22] Invalid argument
,我認爲會的工作代碼基本上是....
服務器
def Main():
host = '0.0.0.0'
port = 20030
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host,port))
#Then it prints incoming data and sends it back to client.
data,addr = s.recvfrom(1024)
s.close()
客戶
def Main():
host = '127.0.0.1'
port = 20020
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host,port))
server = ('10.20.64.115', 20030)
#loop for input to send to server.
s.sendto(message, server)
s.close()
如果我在同一臺計算機上運行它們都和主機= 127.0.0.1,兩者都綁定到127.0.0.1和s.sendto(消息,服務器)發送到127.0.0.1他們可以發送消息回來,沒有問題。
如果我在不同的計算機上運行它們,我相信我應該使用客戶端發送到服務器IP地址的IP地址,但是我得到[Errno 22]。
所以我試圖綁定客戶端到192.0.0.1,它給了一個[Errno 99]不能分配請求的地址。
我試着將客戶端綁定到0.0.0.0,將sendto地址綁定到10.20.64.115,但客戶端只是返回到一個新行,服務器沒有看到任何東西。
所有的教程都說要綁定併發送到127.0.0.1,所以我將兩臺計算機都設置爲這樣,它也不會顯示在服務器中。
所以我現在都很困惑。糾正任何誤解......
綁定(你要聽IP地址,端口,你要聽)
的sendto(你要發送到的消息,IP地址,端口要發送到)
0.0.0.0正在收聽所有內容。
192.0.0.1正在監聽路由器。
127.0.0.1正在收聽電腦。
如果是的話我需要發送什麼ip地址來避免errno 22併成功發送消息到服務器?或者我是否錯過了插座?
哪行代碼產生錯誤?這是蟒蛇2還是蟒蛇3?當你得到錯誤時,'message'的值是多少? –
@jJames K Polk客戶端中的sendto行出現錯誤。兩者都使用2.7版本。消息的值通常只是包含幾個字符的字符串。 「測試」或類似的東西。 – cba1067950
你完全失去了點! 'UDP服務器使用2端口'第一次聽發送。在你的代碼serveron端口= 20030和客戶端端口= 20020,連接/服務? – dsgdfg