如何检测UDP数据包丢失?(C#)

use*_*100 1 c# udpclient ntp

我正在开发SNTP客户端,它通过UDP从NTP服务器获取时间戳.一切正常,我可以下载时间戳和更新Windows时钟,但如果UDP数据包丢失,我想收到一条消息.如何检测数据包何时丢失?我需要这些信息,因为如果数据丢失,我想获得新的时间戳.

......我该如何测试该功能?如何故意丢失UDP数据包?

Ter*_*ver 9

你有三个选择:

  1. 忽略丢弃的数据包
  2. 请改用TCP
  3. 建立自己的检测系统

你问的是如何做#3,答案是:

  • 为每个数据包添加数据包编号和数据包时间戳.
  • 创建数据包堆栈,并按数据包编号将传入的数据包插入堆栈.
  • 仅当存在数据包编号为(最后一个数据包编号+1)的数据包时,才从堆栈中删除数据包.
  • 如果数据包中存在间隙且(gap + 1)数据包的时间戳大于某个阈值,则发送"重新发送请求"数据包以重新发送丢弃的数据包.

等一下......这正是TCP的作用(*)!你应该只使用TCP!

(*)这是一个简化,TCP做了很多工作来使过程可靠.


Thi*_*ter 8

这对UDP来说是不可能的.如果需要可靠的连接,则应使用TCP.