0

我试图找出一种简单的方法来处理 UDP 消息的可靠性。我想我只需给每个人发送一个测序 ID,然后通过将 ID 与之前收到的 ID 进行比较,就可以检测到丢失。我通常只会使用整数,但是它只会无限期地增加的想法并不适合我。

我可以使用 base64,但这只会使它更具可读性,但并不能真正解决任何问题。

我还考虑过在日期戳前面加上前缀,但是在处理午夜左右收到的消息时会有点草率。

我觉得必须有人可以提出更好的解决方案,即使那只是坚持使用整数。

4

2 回答 2

1

我对这项特定工作的偏好是使用以高分辨率时间戳为种子的递增(至少 64 位)整数序列。这样,即使发送端有状态丢失,当序列从那时起重新播种时,它十有八九会简单地向前跳跃。这可能引入的任何 Year 10K 错误都留给 Lazarus Long 作为练习。:-)

请记住,序列间隙检测本质上是一种优化。发送端需要重新传输,直到收到一个 ack,而一个 nack(对于一个间隙或损坏的数据报)只是引发更早的重传。(ZMODEM 是这个规则的一个罕见的例外,它的默认操作模式是在流的末尾使用单个 ack 以及由 nacks 管理的所有其他重传;然而,作为一种文件传输协议,它本质上是一个巨人多部分数据报。)

于 2009-06-04T04:17:48.987 回答
0

使用 TCP?这就是 TCP 与 UDP 不同的原因

我并不是要讽刺,但这就是 TCP 存在的原因。

于 2009-06-04T04:29:25.667 回答