C# 如何为多个发送/接收请求保持TCP连接打开?
我有一个Windows服务,它可以处理来自现场客户的不同客户请求。它工作正常,我在服务器上有类似的代码: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
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-您是否致力于创建自己的解决方案?您是否知道现有的解决方案,例如?免责声明:我是这方面的开发者。