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 的集成控制台视图中跟踪输出。
我希望这对某人有所帮助...
我想弄清楚为什么我的客户端 有时 在监听器 运行 一段时间后没有任何客户端尝试连接后无法连接到服务器。 修复它的唯一方法是重新启动 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 的集成控制台视图中跟踪输出。
我希望这对某人有所帮助...