Python虚拟机本地Socket连接报错WinError 10061求助
嘿,我之前也踩过这个Socket连接的坑,给你梳理几个接地气的排查方向,你一步步来试:
首先先拍脑袋确认最容易漏的低级错误:你是不是先启动了server.py,再运行的client.py? 要是服务器进程都没开,客户端肯定连不上,这个报错会直接跳出来。
接下来咱们按优先级排查:
先在虚拟机内部做本地连通性测试
把你的client.py里的连接地址改成('localhost', 8089)或者('127.0.0.1', 8089),然后在虚拟机里先跑server.py,再跑client.py。如果这个能成功,说明你的Socket代码本身是没问题的,问题出在跨机器(宿主机→虚拟机)的网络连通性上;如果本地都连不上,那得检查服务器的监听状态:- Windows虚拟机里,打开命令行输
netstat -ano | findstr 8089,看看有没有进程在监听8089端口; - Linux虚拟机的话输
netstat -tulpn | grep 8089,确认server.py的进程真的占着这个端口。
- Windows虚拟机里,打开命令行输
确认虚拟机的IP地址是否正确
你客户端里用的是192.168.1.171,先在虚拟机里查一下真实IP:- Windows输
ipconfig,找以太网或者Wi-Fi的IPv4地址; - Linux输
ip addr,找对应的网卡IP。
别输错了IP,这也是新手常踩的坑。
- Windows输
检查虚拟机的网络模式
这个是关键!如果你的虚拟机用的是NAT模式,宿主机和虚拟机不在同一个局域网段,直接连虚拟机的IP肯定不通。你得把虚拟机的网络模式改成桥接模式,这样虚拟机会和你的宿主机获取同一网段的IP,就能正常通信了;如果用的是“仅主机模式”,要确保宿主机上的虚拟网卡(比如VMware的VMnet1)是启用状态,没被禁用。再确认防火墙状态
你说关了防火墙,但要注意:是只关了宿主机的,还是虚拟机里的防火墙也关了?两边的防火墙都得检查一遍,比如Windows虚拟机里的Windows Defender防火墙,Linux里的ufw/iptables,都暂时关掉试试。最后提个小细节(不是当前报错的原因,但之后有用)
你的client.py里send完消息后,记得加上socket_main.close(),不然会有socket资源泄漏的问题。
按照这个顺序排查,应该能快速定位到问题!
备注:内容来源于stack exchange,提问作者Luis2Perez

