Python套接字在主机和VM之间不起作用

时间:2014-12-24 01:31:27

标签: python sockets

我正在学习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其他等)。这对我来说真的很混乱。

1 个答案:

答案 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地址的连接。