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

Python多进程Socket客户端无法连接服务端无报错问题求助

问题根因

  • 你使用了socket.connect_ex()方法但未校验返回值:该方法连接失败时仅返回错误码(如10061代表端口未开放、连接被拒),不会抛出异常,因此你看不到任何连接报错
  • Jupyter Notebook环境下multiprocessing子进程的输出默认不会重定向到主内核的输出单元格:就算子进程内部有报错、有打印内容,你在当前Notebook页面也无法看到
  • Windows系统下multiprocessing默认使用spawn启动方式:直接在Notebook顶层写进程启动代码,会导致子进程导入模块时重复执行代码,最终子进程根本没有正常运行client函数
  • 也可能是启动顺序错误:未先运行服务端Notebook代码,就启动了客户端进程,连接失败后无提示
  • 端口被占用:之前运行的服务端未正常退出,占用了50000端口,新连接无法建立

解决步骤

  1. 添加连接结果校验:要么替换为普通connect()方法捕获异常,要么判断connect_ex()的返回值,拿到连接错误信息
  2. 适配Jupyter下multiprocessing运行逻辑:添加if __name__ == '__main__'判断包裹进程启动代码,避免spawn模式下子进程重复执行启动逻辑
  3. 优先用脚本运行排查问题:如果在Jupyter里始终看不到子进程输出,可以把代码存为.py文件运行,脚本中子进程的输出会直接打印到控制台,更容易排查
  4. 严格保证启动顺序:先运行服务端代码,看到waiting for client输出后,再启动客户端多进程代码

修正后的多进程客户端代码

import socket
import multiprocessing

HOST = '127.0.0.1'
PORT = 50000

def client():
    data = []
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 新增连接校验逻辑
    ret = s.connect_ex((HOST, PORT))
    if ret != 0:
        print(f"连接服务端失败,错误码:{ret}")
        return
    print("成功连接到服务端")
    while True:
        byte_message = s.recv(1024)
        # 新增服务端断开连接的处理逻辑
        if not byte_message:
            print("服务端主动断开连接")
            s.close()
            break
        string_message = byte_message.decode('utf8')
        header, time, data = string_message.split(' ')
        if header == 'close':
            s.shutdown(socket.SHUT_RDWR)
            s.close()
            print('client connection shut down')
            break
        elif header == '<<':
            print(time,float(data))

if __name__ == '__main__':
    # 显式指定启动方式,避免Windows环境兼容性问题
    multiprocessing.set_start_method('spawn', force=True)
    client_process = multiprocessing.Process(target=client)
    client_process.start()
    # 等待子进程运行结束,方便捕获输出
    client_process.join()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:57:04