C#TCPClient用于快速请求-响应方案

时间:2018-09-17 06:05:38

标签: c# .net sockets client tcpclient

在我的上一个任务期间,在TCPClient会话中,无论是同步还是异步模式下,发送后刚接收时,我都会遇到一种特殊的行为。

当我将数据发送到回显服务器后立即放置了一个receive()时,响应会丢失,尤其是当回显服务器位于同一台计算机或同一网络中时。当设置相同的实验通过Internet或回显服务器的回答被延迟时,该问题似乎得到缓解。

我还尝试了异步模型,只是“使用而不接触”有关异步客户端套接字编程的MSDN相关教程。下面显示和链接的代码发送数据,等待发送完成事件,并使用ManualResetEvent信号发送给调用方以通过Receive()函数调用继续进行。在这种情况下,数据也会丢失。

捕获数据包的唯一方法是将接收函数调用放在发送函数之前。尽管这在异步情况下可行,但在同步套接字中却成为问题。

我的问题使与实时TCP自动化板的通信更难以管理,因为我的接收功能通过1次调用变得不同步:

[t=1] send(get_status);
[t=2] receive(); //LOST with no data, execution goes on without exceptions
[t=3] send(get_status);
[t=4] receive(); //Got previous answer

我可以断言,在t = 4时,答案是从t = 1请求中得到的答案,因为请求和后续响应都标有必须是单调递增整数的序列标识符。

放置Thread.Sleep()似乎可以解决周围的问题,但是我绝不能通过解决这些问题来解决自己的问题。

考虑优美的TCP理论,这怎么可能?如何解决这个问题并将其带入确定性行为?

预先感谢您的所有评论,建议和解决方案。

0 个答案:

没有答案