C# TcpClient Connect() 因未知原因超时

C# TcpClient Connect() gets timeout for unknown reason

我有一段代码在连接到我创建的服务器时已经运行了将近两年未受影响。突然,我无法再让 TcpClient 连接了。

正在连接的客户端在我的 Android 设备(Android 版本 6.0)上运行。

TcpClient tcpClient = new TcpClient();
bool success = tcpClient.ConnectAsync(ServerIP, Port).Wait(TimeSpan.FromSeconds(5));
if (success)
    stream = tcpClient.GetStream();

此任务总是 returns 错误。我尝试使用阻塞函数 tcpClient.Connect(),它得到一个超时异常。

  1. 服务器 运行 正在侦听新连接
  2. 我可以从我的所有设备(包括我的 Android 设备
  3. ping 服务器
  4. 我可以通过我的 Android 设备使用 telnet 连接到服务器,方法是传入与我在上面的代码中所做的完全相同的地址和端口
  5. 在我的 Android 设备上使用 telnet 时,我还看到服务器接收到连接并说新连接已建立
  6. 我已经重新启动了我的 Android 设备和服务器机器
  7. 服务器计算机上的防火墙已完全禁用
  8. 我没有尝试重新启动 router/modem。如果可能的话,我想找到问题的根源。

我什至 运行 附加了 Visual Studio 的服务器以查看它是否在处理之前收到任何类型的连接,但它从未收到任何东西。

有什么想法吗?

[更新]

我在我的计算机上编写了一个测试应用程序来尝试使用我在上面编写的完全相同的代码进行连接。它没有使用给定的 IP 地址进行连接。但是,我将 IP 更改为服务器本地 IP 并且它连接了。

因此,我尝试在没有 Wifi 的情况下连接 Android,但仍然无法正常工作。

那么什么会阻止它使用实际 IP 地址而不是本地 IP 地址进行连接?

[答案]

我尝试重置我的 router/modem 但没有用。因此,我将服务器上的本地 IP 更改为其他内容(使用 192.168.0.2,我将其更改为 192.168.0.4)并且它成功了。

我仔细检查以确保我的网络上没有 IP 冲突并且一切正常,所以我不确定为什么 192.168.0.2 导致连接失败。

现在一切都很好。