为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信