如何检测UDP数据包丢失?(C#) [英] How to detect that UDP packet has been lost? (C#)

查看:56
本文介绍了如何检测UDP数据包丢失?(C#)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am developing SNTP client which gets time stamp from NTP server via UDP. Everything works fine, I can download time stamp and update windows clock, but I'd like to get a message if UDP packet has been lost. How can I detect when packet has been lost? I need that information, because I want to get new time stamp if data lost.

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

... and how can I test that feature? How can I lost UDP packet purposely?

推荐答案

您有三个选择:

  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.

这篇关于如何检测UDP数据包丢失?(C#)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆