2016-09-10 72 views
-1

我試圖創建一個簡單的UDP連接,但每次都會失敗。我使用Python 3.5.2與PyCharm。 進口插座 從插座進口AF_INET,SOCK_DGRAM使用UDP套接字時出現getsockaddarg()錯誤

ip = tuple(input('Enter an ip\n')) 
#time = int(input('How long? In seconds \n')) 
msg = 'Hello' 
addr = (ip, 80) 

def connection(): 
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    sock.bind(ip) 
    sock.sendto(msg, addr) 


connection() 

我得到的錯誤是:

Traceback (most recent call last): 
    File "A:/PycharmProjects/udp.py", line 15, in <module> 
    connection() 
    File "A:/PycharmProjects/udp.py", line 11, in connection 
    sock.bind(ip) 
TypeError: getsockaddrarg() takes exactly 2 arguments (14 given) 

Process finished with exit code 1 

回答

0

調用tuple將建設包含在迭代器(輸入字符串)每個個性的元組:

>>> tuple('127.0.0.1') 
('1', '2', '7', '.', '0', '.', '0', '.', '1') 

請勿使用tuple只使用您輸入的內容:

ip = input('Enter an ip\n') 
msg = 'Hello' 
addr = (ip, 80) 

和綁定就可以了:

sock.bind(addr) 
+0

感謝您的答覆。文件「A:/PycharmProjects/udp.py」,第17行,在中 連接() 文件「A:/」我刪除了元組(),然後我得到的錯誤是'Traceback(最近調用最後一個): 「PycharmProjects/udp.py」,第13行,連接 sock.bind(addr) OSError:[WinError 10049]請求的地址在上下文​​中無效 – brexling

+0

好吧,顯然sock.bind僅用於本地連接(我的壞)。我現在使用sock.connect,它似乎工作正常:) – brexling