我正在使用.NET Framework 4.6.2和C#开发套接字服务器和客户端。
服务器类或多或少类似于one。
在客户端,我发送数据以更新数据库。
在服务器上,我在数据库中执行操作(使用存储过程更新表)。
该过程是客户端向服务器发送数据,服务器对其进行处理并发回带有结果的消息。
有时,数据库操作会有更多时间来完成它。当此时间大于Socket.ReceiveTimeout
时,由于TimeOut,我得到SocketException
并且我不处理来自服务器的数据。
有没有办法处理服务器发送的这些数据?
在TimeOut之后我不再等待服务器发送的数据了,我再次启动进程,将新数据发送到服务器,但是当我尝试从这个新数据中读取服务器结果时,我读了服务器对前一个服务器的响应。
客户端上的流程至关重要,我迫不及待地想从服务器获得答案。我需要继续处理数据。
答案 0 :(得分:0)
但是当我尝试从这个新数据中读取服务器结果时,我读取了前一个服务器的响应。
我建议在向服务器发送消息时使用ID。 (您可以获取发送缓冲区的前2个字节)服务器在发送响应时将使用此ID。现在,在客户端,您可以检查您的响应是否具有相同的ID。如果有,您可以使用数据,否则您只需丢弃它并尝试读取下一个传入的响应。
示意图看起来像这样:
<