Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为多个发送/接收请求保持TCP连接打开?_C#_Tcp_Stream_Tcpclient - Fatal编程技术网

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

C# 如何为多个发送/接收请求保持TCP连接打开?,c#,tcp,stream,tcpclient,C#,Tcp,Stream,Tcpclient,我有一个Windows服务,它可以处理来自现场客户的不同客户请求。它工作正常,我在服务器上有类似的代码: server.BeginAcceptTcpClient(ae.End(), null); yield return 1; // socket connection has been established. TcpClient client; try { clien

我有一个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客户端时)

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


任何帮助都将不胜感激。

最终找到了答案,@Idle\u Mind肯定有正确的建议,using{}块导致连接被保留。我第一次删除using时的问题是,客户端在第一次循环后意外地关闭了连接


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

using
块退出时,
客户端
变量将被释放,导致连接关闭。使用块摆脱
…谢谢@Idle\u Mind,但我已经尝试过了,但是如何在下一个请求中获取流?…您只需在循环中调用同步接收方法,或者如果使用异步接收,则必须再次调用它。每次调用只产生一个“receive”,因此在处理当前数据包后,您必须继续调用它以获取下一个数据包。@Idle\u注意,我尝试过它,但当它循环时,第二次调用Stream=client.GetStream()时,它被炸了。您是否有可能提供一个快速的代码示例?@MarkKadlec-您是否致力于创建自己的解决方案?您是否知道现有的解决方案,例如?免责声明:我是这方面的开发者。