问题:
我的 Windows 2008 Server 无法与远程机器建立 TCP 连接。
重现步骤:
我在 Windows 2008 Server 计算机上的端口 40.000 上运行一项服务,IP 为 10.100.5.46。
从另一台 Linux 机器上我尝试使用Telnet 10.100.5.46 40000
这导致了与国家的联系SYN_RECEIVED
。
我使用 netstat-a | find "40000"
查看所有连接,在尝试 telnet 后,我可以看到 2 个连接
- 正在监听端口 40000 的连接
- 处于状态的连接
SYN_RECEIVED
该程序已在其他机器和另一台 Windows 2008 机器上测试过,并且能够正常运行。
有人知道哪里出了问题吗,以及如何修改 Windows 2008 服务器以使其正常工作。
答案1
好的,有些很明显,但也许它们可以有所帮助:
- 服务器是否正确接受其他入站连接,如文件共享、远程桌面等?
- 该服务是否接受来自服务器本身的连接
telnet localhost 40000
? - 该服务是 .NET 应用程序吗?Windows Server 2008 可以获取很多与.NET 框架子功能很棘手。
答案2
我们现在已经找到了解决我的问题的方法,我想分享这个解决方案。
该问题是由 Socket 上的一个选项引起的。
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, true);
当此选项设置为 true 时,我们的服务无法接收来自 Windows 2008 上不同子网的任何连接。连接将卡在 TCP 握手阶段。
对于来自同一台机器或同一子网上的机器的连接来说,这不是问题。
安装在 Windows 2003 上的相同程序在与其他子网的连接时不会出现问题。