背景信息
我正在开发一个支持网络的嵌入式设备,用于与服务器通信。因为这个服务器将运行linux (但我需要Windows工具来开发),所以为了开发的目的,我使用UbuntuServer14.04运行一个VM。
嵌入式方面对于这个问题并不重要,因为我将回到最简单的测试设置(只需将主机连接到VM上的服务器以查看TCP连接是否已建立)来进行故障排除。
网络设置
健康检查执行了
问题分析
使用wireshark,我能够看到TCP连接在执行nc健全性测试(主机<-> VM)时成功地工作。
当我在VM上运行服务器(使用python编写)并尝试通过nc从主机连接时,服务器看不到任何连接(但我们知道从nc到服务器的连接可以工作,因为在VM中已经成功地进行了测试)。
从wireshark,我看到主机向VM发送一个SYN,然后VM用RST、ACK进行响应。主机在放弃之前重试传输两次。
问题
更新:在VM中尝试了nc 192.168.5.118 9050,并观察到了相同的拒绝连接行为,就像我从主机上尝试过一样。根据亚当的说法,我们看起来越来越接近了。将尝试亚当的建议以及张贴更新。
发布于 2014-06-13 20:24:18
操作系统正在发送RST数据包,以指示端口已关闭-没有进程绑定到它并侦听。因此,试图连接的客户端将很快与ECONNREFUSED失败(连接被拒绝)。这是完全正常的行为。
如何绑定到Python服务器进程中的端口?您是否绑定到正确的网络接口?如果您意外地只绑定到回送设备(localhost或127.0.0.1),那么您将看到您所描述的确切内容:从机器到其自身的本地连接将成功,但来自外部主机的连接将失败。
在Python中,通常使用''或'0.0.0.0'作为地址部分,以指示要绑定到所有网络接口;这相当于C常量INADDR_ANY。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', port))https://stackoverflow.com/questions/24213113
复制相似问题