且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-09-24 21:03:58

您有三个选择:

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

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

What you're asking is how to do #3 and the answer is:

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

稍等片刻..这正是TCP的工作方式(*)!您应该只使用TCP!

Hold on a second.. that's exactly how TCP does it(*)! You should just use TCP!

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

(*) That was a simplification, TCP does a great deal of work to make the process reliable.