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

如何在Host-Only模式下实现主机与VirtualBox虚拟机的Socket连接?

主机Ubuntu 20.04到CentOS 7.9虚拟机Host-Only模式Socket连接失败排查与解决

主机系统为Ubuntu 20.04,虚拟机系统为CentOS 7.9,虚拟机网络采用Host-Only模式。主机与虚拟机可正常ping通和SSH连接,且确认两端12345端口未被其他进程占用,但主机端Socket客户端连接虚拟机服务端时持续报错,服务端运行正常。

VM网络设置

虚拟机服务端Python代码

import socket            

s = socket.socket()        
print ("Socket successfully created")
 
port = 12345
s.bind(('192.168.56.103', port))        
print ("socket binded to %s" %(port))

s.listen(5)    
print ("socket is listening")           

while True:
  c, addr = s.accept()    
  print ('Got connection from', addr )
  c.send('Thank you for connecting'.encode())
  c.close()
  break

主机客户端Python代码

import socket            

s = socket.socket()        
port = 12345               
s.connect(('192.168.56.103', port))
 
print (s.recv(1024).decode())
s.close()

客户端报错信息:OSError: [Errno 113] No route to host


解决方法

  • 开放CentOS防火墙端口
    CentOS 7默认启用firewalld,需手动开放服务端使用的12345端口:

    # 临时开放端口(重启防火墙后失效)
    sudo firewall-cmd --add-port=12345/tcp
    # 永久开放端口
    sudo firewall-cmd --add-port=12345/tcp --permanent
    # 重载防火墙规则使设置生效
    sudo firewall-cmd --reload
    

    若需快速验证,可临时关闭防火墙(仅测试用,生产环境不建议):

    sudo systemctl stop firewalld
    
  • 调整服务端绑定地址
    将服务端代码中的绑定地址改为0.0.0.0,使其监听虚拟机所有可用网卡,避免因网卡IP匹配问题导致无法接收连接:

    s.bind(('0.0.0.0', port))
    
  • 确认端口监听状态
    在虚拟机执行以下命令,检查服务端是否正确监听12345端口:

    netstat -tulnp | grep 12345
    # 或使用ss命令
    ss -tulnp | grep 12345
    

    确保输出中监听地址为192.168.56.103或0.0.0.0,且对应进程为你的Python服务端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06