在套接字超时后删除所有待处理数据以供读取
我正在开发一个带有.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