超时后收到UDP响应

时间:2014-09-16 14:29:10

标签: sockets networking udp timeout

我们有一个与服务器通信的UDP客户端。

服务器对每个请求给出一个响应。

客户端发送请求,等待5秒钟响应。

如果5秒钟内未收到服务器的响应 - 客户端认为数据包在网络中丢失(这是UDP ...),将报告写入日志,并发送下一个请求

但是,有时我们在网络上有任何延迟,服务器的响应会在5秒后发生。

让我们描述一下这个场景:

客户端发送了一个名为" X"。

的数据包

5秒的超时到期,客户端报告" X"是一个丢失的数据包。

客户端发送了另一个名为" Y"。

的数据包

服务器对" X"的响应现在来到客户端。

客户端发现响应与请求不兼容,并将其报告给日志。

客户端发送了另一个名为" Z"。

的数据包

服务器对" Y"的响应现在来到客户端。

客户端发现响应与请求不兼容,并将其报告给日志。

这是一个无限循环!

我们能做什么?

1 个答案:

答案 0 :(得分:0)

许多基于UDP的协议包括一个标识符,用于指示给定响应属于哪个请求。客户端选择标识符并将其作为请求的一部分发送到服务器,然后服务器在响应中回送它。这允许客户端匹配对请求的响应,尤其是在您描述的情况下。如果客户在继续之后收到了X的回复,则可以简单地忽略该回复。