检测客户端与HttpListener的连接断开

问题描述 投票:10回答:2

我有一个使用HttpListener的应用程序,我需要知道客户端何时断开连接,现在我将所有代码都放在try / catch块中,这很丑陋,不是一个好习惯。

我怎么知道客户端是否断开连接?

谢谢!

c# httplistener
2个回答
10
投票

简短回答:您不能。如果客户停止通话,则底层套接字可能会保持打开状态,并且永远不会关闭;它只会超时。检测到此问题的方法是尝试对该连接执行操作,如果该连接不再有效,则它将根据发生的情况抛出某种异常。如果您异步使用HttpListener,则可能会通过try / catch清理代码,但不幸的是,这就是您所坚持的。如果客户端断开连接,则不会触发任何事件。


0
投票

我遇到同样的问题,我执行了很长的sql查询,如果用户不断按F5,它会崩溃。

HttpListener不会公开其底层套接字,因此可以对其进行轮询。

所以我设法解决了这个问题:

IDbCommand cmd = LongSqlQuery();
while (!taskCompleted)
{
    try
    {
        //send disposable data at times to check connection
        byte[] dummy = new byte[1] { 0xFF };
        outputStream.Write(dummy,0,1);

        Task.Delay(100).Wait();
    }
    catch
    {
        //Client disconnect
        cmd.Cancel();
    }
}

//Redirect client to results page
response.Redirect("http://yourserver.com/results?query=yourquery");
© www.soinside.com 2019 - 2024. All rights reserved.