亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

socket.connect 拋出 TypeError:需要類似字節的對象,而不是“元組”

socket.connect 拋出 TypeError:需要類似字節的對象,而不是“元組”

湖上湖 2023-10-25 10:24:48
我正在嘗試使用 socket.connect() 連接到服務器上的端口 - 并且我將帶有 IP 地址和端口的元組傳遞給該函數。這是按照標準的:https ://docs.python.org/3/howto/sockets.html#using-a-socket[som@jsclone pwman]$ cat test.py #!/home/som/dev/dev/bin/pythonimport socketdef open_socket(port, ip='127.0.0.1'):    s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)    s.connect((ip, port))    return ssock = open_socket(49152)當我嘗試執行上面的代碼時,出現錯誤:[som@jsclone pwman]$ ./test.py Traceback (most recent call last):  File "./test.py", line 11, in <module>    sock = open_socket(49152)  File "./test.py", line 7, in open_socket    s.connect((ip, port))TypeError: a bytes-like object is required, not 'tuple'Python版本:[som@jsclone pwman]$ /home/som/dev/dev/bin/python --versionPython 3.7.4正如您所看到的,只需連接到端口(甚至沒有實際發送任何數據,我就會收到此錯誤!我知道這種情況,會拋出socket.sendall()此錯誤,但不會socket.connect()!我究竟做錯了什么?socket.sendto()PS由于其他一些依賴代碼的性質,我無法使用。
查看完整描述

2 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

它對你不起作用的原因是你寫的AF_UNIX而不是AF_INET. UNIX - 用于本地進程間通信的套接字。UNIX 域套接字不是通過 IP 地址和端口來標識服務器,而是通過路徑名來識別。


試試這個代碼:


import socket



def open_socket(port, ip='127.0.0.1'):

? ? s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

? ? s.connect((ip, port))

? ? return s



sock = open_socket(49152)

查看完整回答
反對 回復 2023-10-25
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

套接字.AF_INET


import socket



def open_socket(port, ip='127.0.0.1'):

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    s.connect((ip, port))

    return s



sock = open_socket(49152)

https://realpython.com/python-sockets/


查看完整回答
反對 回復 2023-10-25
  • 2 回答
  • 0 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號