我正在学习python套接字编程。如果我在本地运行(服务器和客户端脚本),一切正常。但是,当我将服务器脚本移动到VM(Ubuntu 14.04)并从主机操作系统(Windows 7)运行客户端脚本时,我收到此错误:
ConnectionRefusedError: [WinError 10061] No connection could be made because the
target machine actively refused it
当我尝试在VM中运行客户端时,它工作正常(除非我使用IP地址,即:192.168.1.6,我必须在两个脚本中使用它)。从我的搜索中,我发现linux默认情况下不会激活防火墙。我做错了什么?
两台机器都能看到对方(我在它们之间设置了Samba,可以ping其他等)。这对我来说真的很混乱。
答案 0 :(得分:1)
可能这可以解决问题。
您的服务器代码中有bind
次调用,它看起来像sock.bind(('127.0.0.1', 3333))
,其中3333是服务器端口号。将IP地址更改为空字符串或'0.0.0.0'
,因此它看起来像sock.bind(('', 3333))
。然后再次启动客户端。
原始bind
调用仅将服务器套接字绑定到环回接口(lo
),该接口仅在VM中有效。通过绑定到通配符地址(''
或'0.0.0.0'
),服务器将接受来自任何IP地址的连接。