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

Python SSL双向认证聊天程序客户端[Errno 111]连接拒绝求助

解决跨机连接被拒绝的排查步骤
  • 确认服务器监听地址正确性
    把服务器的bind参数明确改为0.0.0.0,而不是空字符串。虽然Python中空字符串等价于0.0.0.0,但部分环境下可能存在解析差异,直接指定0.0.0.0能确保服务器监听所有可用网卡的IP,而非仅本地回环。

  • 验证服务器实际监听状态
    在服务器主机上执行以下命令,检查端口的监听情况:

    ss -tulpn | grep <你的端口号>
    

    确保输出结果中的监听地址是0.0.0.0:<端口>,如果显示的是127.0.0.1:<端口>,说明服务器仅绑定了本地回环,跨机无法连接。

  • 排查网络连通性

    • 用客户端ping服务器的局域网IP,确认两台设备在同一局域网且网络可达。如果ping不通,先检查路由器设置、设备IP段是否一致(比如均为192.168.x.x段)。
    • 若ping通但telnet被拒,检查服务器端是否有杀毒软件防火墙或路由器的端口过滤规则,部分杀毒软件会默认拦截陌生端口流量,路由器也可能限制了该端口的转发。
  • 检查端口占用与权限

    • 用上述ss命令确认目标端口未被其他进程占用。如果端口被占用,更换端口或终止占用进程。
    • 若使用1-1024的特权端口,必须用sudo运行服务器脚本,确保权限足够。
  • 简化测试排除干扰
    暂时移除SSL认证逻辑,编写最简版的TCP服务器和客户端:
    服务器示例:

    import socket
    
    HOST = '0.0.0.0'
    PORT = 你的端口号
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((HOST, PORT))
        s.listen()
        print(f"Listening on {HOST}:{PORT}")
        conn, addr = s.accept()
        with conn:
            print(f"Connected by {addr}")
            while True:
                data = conn.recv(1024)
                if not data:
                    break
                conn.sendall(data)
    

    客户端示例:

    import socket
    
    HOST = '服务器局域网IP'
    PORT = 你的端口号
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((HOST, PORT))
        s.sendall(b'Hello, server')
        data = s.recv(1024)
    
    print(f"Received {data!r}")
    

    测试基础TCP连接是否能通,若仍被拒,说明问题出在基础网络或服务器监听配置,而非SSL逻辑。

  • 检查服务器代码逻辑
    在服务器监听成功后添加打印日志,确认程序确实处于监听状态,避免因未捕获的异常导致socket意外关闭。比如在s.listen()后添加:

    print(f"Server is listening on {HOST}:{PORT} successfully")
    

内容的提问来源于stack exchange,提问作者enid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:50:27