删除套接字超时后要读取的所有待处理数据

时间:2016-12-19 08:13:34

标签: c# sockets tcplistener

我正在使用.NET Framework 4.6.2和C#开发套接字服务器和客户端。

客户是SynchronousSocketClient

服务器类或多或少类似于one

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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

示意图看起来像这样:

<