C# TCPListener 在空闲阶段后停止监听

C# TCPListener stops listening after idle phase

我想弄清楚为什么我的客户端 有时 在监听器 运行 一段时间后没有任何客户端尝试连接后无法连接到服务器。 修复它的唯一方法是重新启动 TCP 侦听器 - 服务器。 如果我启动服务器并且一些人连接,做一些事情然后断开连接,则没有问题。

我有一个简单的 while 循环来接受传入的套接字连接:

            while (IsOn)
            {
                try
                {
                    if (!tcpListener.Pending())
                    {
                        Thread.Sleep(100);
                        continue;
                    }
                    Socket socket = tcpListener.AcceptSocket();
                    if (socket != null)
                    {
                        TcpClient client = new TcpClient();
                        client.Client = socket;
                        IncommingClientConnection(client); // Nonblocking Code
                    }
                }catch(Exception e)
                {
                    NetLog.Exception(e, "An error occured while user connected!");
                }
            }

上次发生错误是在大约 8 小时的空闲时间之后。有时它发生得更早。

我试图调试这个问题,但侦听器线程仍然 运行,它似乎挂在

tcpListener.AcceptSocket()

.

我了解到可以通过设置 Windows 服务来解决此问题,但目前需要完成大量工作。但是没有其他方法可以强制 Listener 保持打开状态吗?

非常感谢任何建议,谢谢!

我知道错误是什么了。这太荒谬了,为什么一个冻结的线程应该与"Console.WriteLine()"有关?!

问题是,Windows Server 2016 上的控制台 Window 以某种方式更改为输入模式。然后该线程在 "Console.WriteLine" 上阻塞并等待用户在控制台 Window 上按 Enter 键?!我尝试了一些场景。即使我有一段时间没有接触 Remove-Desktop 也会出现此问题。

解决方案:从控制台应用程序切换到 Windows 应用程序并在 IDE 的集成控制台视图中跟踪输出。

我希望这对某人有所帮助...