我正在试图找出一种处理UDP消息可靠性的简单方法。我想我只会发送每一个带有测序ID的ID,并且通过将ID与先前接收的ID进行比较,可以检测到丢失。我通常只会使用整数但是它会无限增加的想法并不适合我。
我可以使用base64,但这只会让它更具可读性但却无法解决任何问题。
我还考虑过加上日期戳的前缀,但在处理午夜时分收到的邮件时会有些草率。
我觉得必须有一个更好的解决方案,有人可以建议,即使只是坚持整数。
答案 0 :(得分:1)
我对此特定工作的偏好是使用以高分辨率时间戳播种的递增(至少64位)整数序列。这样,即使在发送端存在状态丢失,当从该时间重新播种该序列时,它很可能只是向前跳跃。任何可能引入的10K年的错误都留给了Lazarus Long。 : - )
请记住,序列间隙检测本质上是一种优化。发送端需要重新发送,直到收到ack,nack(用于间隙或损坏的数据报)简单地引出早期的重传。 (ZMODEM是这个规则的一个罕见的例外,它的默认操作模式是在流的末尾使用单个ack和由nacks管理的所有其他重传;但是,作为文件传输协议,它基本上是一个巨人多部分数据报。)
答案 1 :(得分:0)
使用TCP? This is why TCP is different to UDP
我不是故意讽刺,但这就是TCP存在的原因。