我写过两个通过(QT-)TcP互相交流的程序。如果它们都在我的电脑上运行(例如使用127.0.0.1作为地址),一切都很顺利。一旦我在另一台电脑上部署了其中一个程序,我就不会再回来连接,例如从我的程序(在端口40000和40002上)连接到另一台PC上正在运行的TcP服务器,但不能从端口40001和40003上的其他电脑连接。这是因为我的端口已关闭吗?我已经尝试打开它们,但是nmap不能告诉我更多关于它们的信息。我怎样才能找到解决方案?
更新:根据netstat,本地和远程PC上必需端口上的服务器正在侦听(例如:
tcp 0 0 0.0.0.0:40002 0.0.0.0:* LISTEN off (0.00/0/0)
),但我只能从我的电脑连接到远程电脑,而不是相反。
另一种错误的可能性:我在一台虚拟机中运行我的开发系统,并与外部进行NAT连接。这可能是我没有得到传入信号的问题吗?
答案 0 :(得分:2)
它可能是绑定问题和/或防火墙问题。
如果您的监听器仅绑定在127.0.0.1上,则两台计算机之间的连接将无法正常工作,因为接口上没有听到流量。您需要将绑定地址设置为0.0.0.0(这意味着任何)通常是为了实现此目的。
另外,如果防火墙绑定到任何接口,请检查防火墙是否阻止这些端口上的流量。
编辑示例netstat寻找显示在各种界面上侦听的7001(WebLogic管理端口)
$ netstat -nl | grep 7001
tcp6 0 0 192.168.1.149:7001 :::* LISTEN
tcp6 0 0 127.0.0.1:7001 :::* LISTEN
tcp6 0 0 ::1:7001 :::* LISTEN
编辑2 我看到你在NAT上了。源自目标的流量不会路由回您自己的VM。尝试更改为与目标相同范围的桥接网络,如果您使用DHCP获取IP地址,那么这将是您的VM注册可以工作的IP的最简单方法