在套接字超时后删除所有待处理数据以供读取

我正在开发一个带有.NET Framework 4.6.2和C#的套接字服务器和客户端。

客户端是SynchronousSocketClient

服务器类或多或少是这样的。

在客户端上,我发送数据以更新数据库。

在服务器上,我在数据库中执行操作(使用存储过程更新表)。

该过程是客户端向服务器发送数据,服务器对其进行处理并发送带有结果的消息。

有时候,数据库操作有更多时间来完成它。 当这个时间大于Socket.ReceiveTimeout我得到一个由于TimeOut而产生的SocketException ,并且我不处理来自服务器的数据。

有没有办法处理服务器发送的这些数据?

在TimeOut之后,我不再等待服务器发送的数据,我再次启动该过程,向服务器发送新数据,但是当我尝试从这个新数据读取服务器结果时,我读取了服务器响应为前一个。

客户端的过程非常重要,我迫不及待地想从服务器获得答案。 我需要继续处理数据。


但是当我尝试从这个新数据读取服务器结果时,我读取了前一个服务器的响应。

我建议在向服务器发送消息时使用ID。 (您可以获取发送缓冲区的前2个字节)服务器在发送响应时将使用此ID。 现在在客户端,您可以检查您的响应是否具有相同的ID。 如果有,您可以使用这些数据,否则您只需丢弃它并尝试读取下一个传入的响应。

示意图看起来像这样:

          ID = 1 
Client ------------> Server

          ID = 1 
Client <------------ Server

          ID = 2 
Client ------------> Server

X----ERROR----TimeOut
          ID = 3 

Client ------------> Server

          ID = 2 
Client <------------ Server

Client 3!=2 --> do not process, read again

          ID = 3 
Client <------------ Server
链接地址: http://www.djcxy.com/p/48293.html

上一篇: Remove any pending data to read after socket timeout

下一篇: C++ / C# Communication using Named Pipes