You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:17:57