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

如何从Windows宿主机连接VirtualBox内Linux虚拟机的Python Socket服务

Socket跨VirtualBox虚拟机通信失败排查方案
  • 确认服务端监听配置正确
    服务端代码必须绑定非本地回环地址才能被宿主机访问,不可仅绑定127.0.0.1,需绑定0.0.0.0(监听所有网卡)或虚拟机对外IP 192.168.1.33,且绑定的端口需和客户端连接端口完全一致。服务端参考代码如下:
    import socket
    server = socket.socket()
    # 绑定0.0.0.0和9090端口,和客户端连接端口保持一致
    server.bind(('0.0.0.0', 9090))
    server.listen(5)
    conn, addr = server.accept()
    print(f"来自{addr}的连接")
    
  • 放开Linux虚拟机防火墙端口
    默认Linux防火墙会拦截外部请求,需手动放开监听端口:
    若使用ufw防火墙,执行命令:ufw allow 9090/tcp
    若使用firewalld防火墙,执行命令:
    firewall-cmd --add-port=9090/tcp --permanent
    firewall-cmd --reload
    
    测试阶段可临时关闭SELinux避免拦截:setenforce 0
  • 验证端口监听状态
    在虚拟机内执行命令:ss -tulnp | grep 9090,若有对应Python进程的监听输出,说明服务端正常启动,否则检查服务端代码报错信息。
  • 放开Windows宿主机防火墙限制
    临时关闭Windows Defender防火墙测试,或手动添加Python客户端程序的出站规则,避免请求被宿主机防火墙拦截。
  • 修复客户端代码错误
    你当前的客户端代码send方法直接传入字符串会触发类型错误,需改为传输bytes类型:
    import socket
    
    cliente = socket.socket()
    try:
        # 端口和服务端绑定的端口一致即可
        cliente.connect(('192.168.1.33',9090))
        # 转成bytes再发送
        cliente.send(b"1")
    except Exception as e:
        print(f"连接失败:{e}")
    

核心逻辑:客户端连接的端口必须是服务端代码中bind方法指定的端口,无需随意试其他端口,两端端口保持一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:45:03