socket.connect抛出TypeError:需要类似byteslike的对象,而不是“tuple”

2024-09-29 23:28:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用socket.connect()连接到服务器上的一个端口-我正在使用IP addr和端口向这个函数传递一个元组。这是这里的标准: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 ^{} throws this error,但不是socket.connect()

我做错了什么? 另外,由于某些其他依赖代码的性质,我不能使用socket.sendto()


Tags: 端口pydevtestiphomebinport
2条回答

它不适合您的原因是您编写了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)

如果您有兴趣阅读有关UNIX套接字的更多信息,可以阅读以下内容:https://troydhanson.github.io/network/Unix_domain_sockets.html

socket.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/

相关问题 更多 >

    热门问题