NTP报文的格式如下:

LI 闰秒标识器,占用2个bit。0 即可。
VN 版本号,占用3个bits,表示NTP的版本号,现在为3
Mode 模式,占用3个bits,表示模式。 3 表示 client, 2 表示 server
stratum(层),占用8个bits。不清楚怎么用
Poll 测试间隔,占用8个bits,表示连续信息之间的最大间隔。不清楚怎么用
Precision 精度,占用8个bits,,表示本地时钟精度。 不清楚怎么用
Root Delay根时延,占用8个bits,表示在主参考源之间往返的总共时延。 不清楚怎么用
Root Dispersion根离散,占用8个bits,表示在主参考源有关的名义错误。 不清楚怎么用
Reference Identifier参考时钟标识符,占用8个bits,用来标识特殊的参考源。不同的 NTP server 改字段不一样
参考时间戳,64bits时间戳,本地时钟被修改的最新时间。一般由 server 端填写,表示 server 上次同步时间戳的时间点
原始时间戳,客户端发送的时间,64bits。即公式中的 t1 。client 请求时必须填写,server 端响应时、回写请求包里的该字段
接受时间戳,服务端接受到的时间,64bits。即公式中的 t2 。server 端填写
传送时间戳,服务端送出应答的时间,64bits。即公式中的 t3。server 端填写
认证符(可选项)

其中,四个时间戳:

  1. ReferenceTimeStamp   参考时间戳
  2. OriginateTimeStamp    原始时间戳    T1
  3. ReceiveTimeStamp     接收时间戳   T2
  4. TransmitTimeStamp    传送时间戳   T3
  5. 还差一个T4,T4为客户端接收到响应报文时的时间戳
  6. 计算公式:NTP报文往返时延:Delay=(T4-T1)-(T3-T2)
  7. 时间差:Offset=((T2-T1)+(T3-T4))/2

计算出这两个,就是需要的值

如何计算:

刚开始直接就代入了公式,用加减法计算,但是算出来的值特别大

后来找了很久,才发现应该用msecsTo(),不知道为啥,明明之前加减法的时候,已经全部转换成了毫秒,还是不行,现在将它转换成日期,然后用这个函数,算出来就是对的

   OriginateTimeStamp=newTime.mid(24,8);ReceiveTimeStamp=newTime.mid(32,8);TransmitTimeStamp = newTime.right(8);DestinationTimeStamp=CURRENT_NTP_MILLION_SECOND;qint64 t1=byte64ToMillionSecond(OriginateTimeStamp);qint64 t2=byte64ToMillionSecond(ReceiveTimeStamp);qint64 t3=byte64ToMillionSecond(TransmitTimeStamp);qint64 t4=CURRENT_NTP_MILLION_SECOND;QDateTime d1;QDateTime d2;QDateTime d3;QDateTime d4;d1.setMSecsSinceEpoch(t1);qDebug()<<"t1:"<<d1;d2.setMSecsSinceEpoch(t2-2208988800000);qDebug()<<"t2:"<<d2;d3.setMSecsSinceEpoch(t3-2208988800000);qDebug()<<"t3:"<<d3;d4.setMSecsSinceEpoch(t4-2208988800000);qDebug()<<"t4:"<<d4;//qDebug()<<"d2-d1+d3-d4"<<(d2.toMSecsSinceEpoch()-d1.toMSecsSinceEpoch()+d3.toMSecsSinceEpoch()-d4.toMSecsSinceEpoch())/2;qint64 offset;offset=(d1.msecsTo(d2)+d4.msecsTo(d3))/2;qint64 delay;delay=d1.msecsTo(d4)-d2.msecsTo(d3);

不知道怎样同步时间,利用时间差对本地时间进行校准,本地时间=T3+Offset这样同步后,时差没有变小

在另一篇文章上看到  本地时间=T3+delay/2   这样同步之后,时差确实变小了,但是不知道到底对不对

Qt|解析NTP报文时间戳,并计算时差和延迟,利用时差同步时间相关推荐

  1. NTP的时间戳的LSW转换为unix的usec

    关于NTP协议的介绍就不啰嗦了,网上已经有很多介绍的文章 这次写的是NTP 时间戳里面的LSW字段到unix的usec的转换 NTP的时间戳有两个32位数分别是:MSW和LSW, MSW以秒为单位 L ...

  2. java 8583报文解析_ISO8583报文工具类(组装和解析报文) | 学步园

    很久没来csdn了.现在的工作地点在银行,妈的,不让上网啊. 写写博客其实是对自己知识的总结,这么长时间了,也该写点东西了.接触银行的项目,避免不了 遇上8583报文.具体介绍就不细讲了,这个网上一大 ...

  3. 解析 http 请求 header 错误_详解http报文(2)-web容器是如何解析http报文的

    摘要 在详解http报文一文中,详细介绍了http报文的文本结构.那么作为服务端,web容器是如何解析http报文的呢?本文以jetty和undertow容器为例,来解析web容器是如何处理http报 ...

  4. QT如何实现对于字符串数学公式计算

    QT如何实现对于字符串数学公式计算 第一步: 在.pro文件中加入 QT += script 第二步: 在.h头文件中添加 #include 第三步: QScriptEngine scriptEngi ...

  5. QT解析 JSON 格式的数据

    QT解析 JSON 格式的数据 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON 采用完全独立于语言的文本格式,这些特性使 JSON 成为理想的数 ...

  6. urllib.request.urlopen(req).read().decode解析http报文报“‘utf-8‘ codec can‘t decode”错处理

    urllib.request.urlopen(req).read().decode解析http报文报"'utf-8' codec can't decode"错处理:https:// ...

  7. Qt 解析 DXF 文件

    Qt 解析 DXF 文件 自己编写,亲测可用 使用示例 #include "dxfhelper.h" int main() {DxfHelper dxfHelper;if(dxfH ...

  8. C解析8583报文55域

    以下这段代码是C解析8583报文,我直接从我们系统粘贴出来的,供大家参考.打日志log部分,请自行更改,TAG标签也可以根据你的55域做相应删减. typedef struct {         c ...

  9. Java解析XML报文内容及标签属性

    前言 JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型.字体 ...

最新文章

  1. QuadricSLAM: 面向机器人的物体级语义SLAM系统
  2. Design Pattern - State(C#)
  3. 箱线图怎么判断异常值_箱形图(Box-plot)识别异常值,是否有数据依据?还是经验法则?...
  4. 那些年,我们一起做过的性能优化
  5. APP、智能设备、平台账号等信息系统,实现无密码登录的可行性方案。
  6. 加速前进!华为已在全球多地注册“鸿蒙”商标
  7. xhell 镜像_2020官网下载Xshell 6.0.189.0中文版
  8. Java每日问题汇总-02
  9. 预处理: 主成分分析和白化
  10. 利润表模板excel_德勤HR:请1小时内,用Excel搭建哔哩哔哩财务估值模型
  11. Multisim高频电子线路4.7振荡器仿真
  12. ZYNQ 系统的IEEE1588 实现方法
  13. python 刷手机今日头条金币_刷金币全自动脚本 | 让Python每天帮你薅一个早餐钱(送源码)...
  14. 注册表删除方式解决Navicat到期问题
  15. CMMI2.0和1.3之间的区别有哪些?
  16. 磁力搜索 v2.3.5.0 for Android 免费无广告版
  17. win10删除右键菜单多余项
  18. ssm根据pdf模板导出pdf
  19. 京东AI:戴口罩人脸识别pytorch开源库
  20. rsync使用ssh指定端口

热门文章

  1. linux目录介绍和命令总结(后期续更)
  2. 为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作...
  3. Elasticsearch(二、高级查询+集群搭建)
  4. java—finally的用法
  5. 网络异常流量分析系统设计
  6. VS2019 MSB364 未找到框架“NETFramework,Version=v4.7”
  7. 华为鸿蒙更新变化,华为鸿蒙系统更新,4个功能迎来升级,花粉升级还要再等等...
  8. HDMI接口与TMDS协议
  9. containet_of
  10. 电子积木fx微型计算机,百变星君|你搭建过“电子积木”吗?