如何为多个发送/接收请求保持TCP连接打开?

时间:2013-06-12 21:49:17

标签: c# tcp stream tcpclient

我有一个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

        }
    }

当客户端发送对say,request1的请求并获得reply1时,此方法正常,但如果客户端在此之后立即发送请求2,则需要再次连接然后再接收reply2。有时此连接最多可能需要3秒钟(使用3G客户端时)。

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

我在客户端修复了这个问题,现在只是循环并等待等待,仍然想知道是否有办法最终超时(如果客户端没有说1分钟),但我没事让客户端结束连接。