0

我有一个 Windows 服务,可以处理来自我们在现场的客户端的不同客户端请求。它工作正常,我在服务器上有类似的代码:

    server.BeginAcceptTcpClient(ae.End(), null);   
    yield return 1;                                

    // socket connection has been established.
    TcpClient client;
    try {
        client = server.EndAcceptTcpClient(ae.DequeueAsyncResult());
    } catch (Exception e) {
        Log.Error(e.ToString());
        yield break;
    }

    using (client) {

        // Set up another listener.
        Start(server);

        using (Stream stream = client.GetStream()) {   

        ... All the work happens here and stream is returned to the client

        }
    }

当客户端发送请求 request1 并获得回复 1 时,这可以正常工作,但如果客户端在此之后立即发送请求 2,则需要再次连接然后接收回复 2。有时,此连接最多可能需要 3 秒(使用 3G 客户端时)。

我想让它在服务器侦听的地方,如果建立了连接,可以通过流接收/响应多个请求,然后在客户端发送“结束”请求后,将断开连接。我想这会快得多,这可能吗?

任何帮助,将不胜感激。

4

1 回答 1

0

终于弄清楚了,@Idle_Mind 肯定有正确的建议, using{} 块导致连接被保持。我第一次删除 using 时的问题是客户端在第一个循环后意外关闭了连接。

我在客户端解决了这个问题,现在只是循环并等待,仍然想知道是否有办法最终超时(如果客户端在 1 分钟内什么都不做),但我可以接受客户端结束连接。

于 2013-06-17T20:16:48.960 回答