【发布时间】:2020-10-10 00:58:34
【问题描述】:
我正在尝试使用 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/python
import socket
def open_socket(port, ip='127.0.0.1'):
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect((ip, port))
return s
sock = 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 --version
Python 3.7.4
如您所见,只需连接到端口(甚至没有实际发送任何数据我都会收到此错误!我知道这种情况,where socket.sendall() throws this error,但不是socket.connect()!
我做错了什么?
附:由于其他一些依赖代码的性质,我不能使用socket.sendto()。
【问题讨论】:
-
您的意思是使用套接字
AF_INET而不是AF_UNIX? Unix 套接字是本地文件,它们没有端口或 IP 地址。这就是为什么它需要字节而不是元组。 -
@jordanm 就是这样!非常感谢你!
-
@jordanm 你能重新提交作为答案而不是评论吗?你的解释比 Naga 的要好很多(他只是给出了一个关键字和一个链接)。