安卓Python客户端Socket连接VirtualBox内Python服务器失败如何排查?
无法连接的根本原因
你在虚拟机内拿到的10.0.2.15是VirtualBox默认NAT网络模式下的内部隔离IP,这个网段仅在VirtualBox内部生效,既不能被宿主机访问,也不能被同一Wifi下的安卓手机访问,因此安卓端请求该IP时会直接触发连接超时报错。
排查&解决步骤
- 第一步:修改VirtualBox网络模式为桥接模式
关闭运行的Ubuntu虚拟机,打开VirtualBox对应虚拟机的「设置」-「网络」页,将「连接方式」从默认的「NAT」改为桥接网卡,下方「界面名称」选择你电脑当前连接Wifi的无线网卡,保存设置后启动虚拟机。 - 第二步:获取虚拟机的局域网可访问IP
进入Ubuntu系统后,重新执行命令hostname -I,此时获取到的IP会和你的电脑、安卓手机处于同一Wifi网段(通常为192.168.x.x格式),这才是可以被外部设备访问的有效IP。 - 第三步:修改Python服务器绑定规则
原有代码仅绑定了旧的NAT内部IP,需要改为监听所有网卡请求,保证外部设备的连接能被接收:
修改后重启Python服务器。# 将原有绑定地址改为0.0.0.0 socket_address = ('0.0.0.0', port) - 第四步:放行Ubuntu防火墙端口
Ubuntu默认的ufw防火墙会拦截外部对10050端口的请求,执行以下命令放行端口:
临时测试也可以直接关闭防火墙:sudo ufw allow 10050/tcpsudo ufw disable,验证连通后再配置规则即可。 - 第五步:验证网络连通性
先在安卓端测试和虚拟机的网络连通:可以用安卓终端模拟器ping第二步拿到的虚拟机IP,确认能ping通后,再测试10050端口是否开放,确认网络链路无问题。 - 第六步:修改安卓端连接配置
将安卓代码中的host_ip改为第二步拿到的虚拟机桥接模式IP,重新运行APP即可。
额外注意事项
如果操作完成后依然无法连接,检查你所用的Wifi是否开启了AP隔离(公共Wifi、部分路由器默认会开启该功能,禁止同一Wifi下的设备互相访问),可以切换为手机热点、家用私人Wifi再测试。
内容的提问来源于stack exchange,提问作者tww1
相关产品推荐
相关产品推荐

