socket.connect抛出TypeError:需bytes-like对象而非tuple的问题排查
问题分析与解决方案:socket.connect() 报错 TypeError: a bytes-like object is required, not 'tuple'
嘿,这个问题其实很典型——你选错了套接字的地址族类型!让我给你拆解一下:
错误核心原因
你创建的是socket.AF_UNIX类型的套接字(这是Unix域套接字,用于本地进程通过文件路径通信),但却给connect()方法传入了TCP/IP套接字(AF_INET)才会用的(ip, port)元组,两者完全不匹配,所以触发了类型错误。
具体来说:
AF_UNIX套接字的connect()要求传入字节串格式的本地文件路径,比如b'/run/my_service.sock'- 只有
AF_INET(IPv4)或AF_INET6(IPv6)类型的TCP套接字,才会接受(ip, port)这样的元组参数
修正后的代码(连接TCP服务器)
既然你要通过IP和端口连接,只需要把套接字类型改成AF_INET即可:
#!/home/som/dev/dev/bin/python import socket def open_socket(port, ip='127.0.0.1'): # 将AF_UNIX改为AF_INET,适配TCP/IP连接 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, port)) return s sock = open_socket(49152)
如果你确实需要用Unix域套接字
如果你的场景是连接本地的Unix域套接字服务,那应该调整connect()的参数为字节串路径:
#!/home/som/dev/dev/bin/python import socket def open_unix_socket(socket_path): s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) # 传入字节串格式的套接字文件路径 s.connect(socket_path) return s sock = open_unix_socket(b'/path/to/your/unix/socket')
内容的提问来源于stack exchange,提问作者Somenath Sinha
相关产品推荐
相关产品推荐

