【发布时间】:2012-04-04 07:35:00
【问题描述】:
我有一个 C++ 应用程序,它接受 TCP 连接,然后读取发送给它的流量。在我将其移至新机器之前,它一直运行良好。似乎 winsock 从不接受入站 tcp 连接。在我的代码中,它永远不会从 select 语句中返回。我可以使用 netstat/tcpview 看到应用程序正在侦听端口 14005。
如果我只是在本地远程登录,我可以连接到这个端口。但是,当有人尝试通过外部 IP 地址连接时,TCP 3 方式的握手永远不会完成。我可以在wireshark 中看到入站SYN 数据包。它会转到正确的端口 14005。但是我的系统从不发回 SYN-ACK。这只是winsock应该处理的事情吗?这台机器确实有多个 NIC 卡,但我与 INADDR_ANY 绑定,所以这无关紧要。有什么方法可以让我更深入地了解为什么这种握手永远不会发生?
【问题讨论】:
-
您检查防火墙设置了吗?听起来像是在运行 Windows 防火墙。
-
听起来像是防火墙问题。防火墙设置是什么?
-
是的,我确实检查过了。 windows防火墙已关闭,所以我在那里没问题。我也没有在机器上看到任何其他防火墙软件。可能有什么东西漏掉了,但我到处找。
-
所以如果有软件防火墙,我通常会看到一个 SYN 数据包?如果有硬件防火墙,它们会让 SYN 数据包通过吗?