连接关闭,如果它空闲一段时间

时间:2016-02-24 07:06:57

标签: c# sockets asynchronous .net-4.5 tcpserver

我在.Net 4.5中实现了客户端 - 服务器应用程序,一切正常。

多个客户端(硬件设备)同时连接到服务器并进行数据传输。

现在我想关闭来自服务器的连接,如果在套接字上的某段时间内没有数据传输,即我只是想关闭服务器的连接,如果它保持空闲(没有数据传输),让我们说5分钟。

3 个答案:

答案 0 :(得分:1)

我认为你可以实现这样的事情:

DateTime startDateTime = DateTime.Now;

using (var client = new HttpClient)
{
    DateTime currentDateTime = DateTime.Now;
    while(currentDateTime - startDateTime < threshold)
    {
        currentDateTime = DateTime.Now;
        if(dataArrive)
        {
           startDateTime = DateTime.Now;
        }
    }

    //TO DO: Close communication channel
}

阈值是你的5分钟。和// dataArrive在数据传输时为true。

相反,您执行http请求可以使用HttpClient.Timeout属性。

答案 1 :(得分:0)

您已经探索了为idle_timeout参数设置正确值的选项,该参数在达到阈值后会小心关闭连接。

答案 2 :(得分:0)

您必须在应用程序级别实施连接超时(作为通信协议的一部分):对于每个连接,在您收到数据后,启动计时器设置为预定义的超时值(例如5分钟)。如果在超时之前收到数据,请重置计时器。如果您没有收到数据,请停止计时器并关闭该连接。