2013-05-15 51 views
1

我在C#中创建了一个tcp侦听器。我将无限时间设置为0。如果听众和客户之间的周末没有约50小时的活动,但不会断开连接。它死了大约50小时后Tcp Listener死亡

请咨询我该如何解决这个问题。

在此先感谢。

+0

什么样的应用程序主持这个监听器?操作系统中的某些东西是否可能终止这个过程? – David

+0

不,进程仍在运行,我不确定它是.NET问题还是别的什么 –

+0

请澄清程序是否停止*侦听*连接,或者现有的闲置*连接*是否终止。另外,您可以使用两个系统之间的直接有线连接来测试,以排除由服务提供商或网络不可靠性强加的任何内容吗?确定具体的超时可能会有帮助,即它是一致的还是随机的?您可能需要在一个时间间隔内实施保持活动的流量。 –

回答

0

路由器通常会在预设的时间量后终止空闲的TCP连接。如果您的连接正在通过互联网进行,您无法控制这一点。为防止此问题以编程方式检测您的空闲连接并发送非常少量的信息,即每5分钟左右发送byte[] { 0 };

这不会增加开销,就好像连接处于活动状态一样,您不会发送'keep alive packet'。

另一种选择是使用`Socket.SetSocketOption'在底层套接字上设置'KeepAlive'选项。这应该执行相同的功能,但我总是发现一个更可靠的自定义解决方案。

+0

你究竟是如何从监听器中发送这样的数据包的? –

+0

@ 500-InternalServerError - 我会建议在底层TCPListener套接字上,或使用自定义解决方案,一旦建立连接(通过TcpListener.AcceptTcpClient)手动发送数据包。 – MarcF

+0

我了解OP的方式,当发生这种情况时,没有客户端连接。 –