function parseMsg (buffer) {
if (buffer.length !== 48) return;
const pkt = {},
now = new Date().getTime();
pkt.leapIndicator = buffer[0] >> 6;
pkt.version = (buffer[0] & 0x38) >> 3;
pkt.mode = buffer[0] & 0x7; pkt.stratum = buffer[1];
pkt.interval = Math.pow(2, buffer[2]);
pkt.precision = Math.pow(2, buffer[3]) * 1000;
pkt.rootDelay = 1000 * ((256 * (256 * (256 * buffer[4] + buffer[5]) + buffer[6]) + buffer[7]) / 0x10000);
pkt.rootDispersion = ((buffer[8] << 8) + buffer[9] + ((buffer[10] << 8) + buffer[11]) / Math.pow(2, 16)) * 1000;
pkt.referenceId = pkt.stratum < 2 ? String.fromCharCode(buffer[12]) + String.fromCharCode(buffer[13]) + String.fromCharCode(buffer[14]) + String.fromCharCode(buffer[15]) : pkt.stratum < 16 ? `${buffer[12]}.${buffer[13]}.${buffer[14]}.${buffer[15]}` : '';
pkt.referenceTimestamp = toMsecs(buffer, 16);
pkt.originateTimestamp = toMsecs(buffer, 24);
pkt.receiveTimestamp = toMsecs(buffer, 32);
pkt.transmitTimestamp = toMsecs(buffer, 40); pkt.time = pkt.originateTimestamp;
pkt.delay = ((now - pkt.originateTimestamp) - (pkt.transmitTimestamp - pkt.receiveTimestamp)).toFixed(3) / 1;
pkt.offset = (((pkt.receiveTimestamp - pkt.originateTimestamp) + (pkt.transmitTimestamp - now)) / 2).toFixed(3) / 1;
return pkt;
}
function toMsecs(buffer, offset) {
let seconds = 0, fraction = 0;
for (let i = 0; i < 4; i++) {
seconds = (seconds * 256) + buffer[offset + i];
}
for (let i = 4; i < 8; i++) {
fraction = (fraction * 256) + buffer[offset + i];
}
return (seconds - 2208988800 + (fraction / Math.pow(2, 32))) * 1000;
}

Ntp客户端的更多相关文章

  1. Centos7安装搭建NTP服务器和NTP客户端同步时间

    NTP简介: NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议. 在计算机的世界里,时间非常地重要 例如:对于火箭发射这种科研活动,对时间的 ...

  2. 003.NTP客户端配置

    一 NTP客户端同步方式 ntpdate定时任务同步 ntp服务同步 二 ntpdate定时任务同步 2.1 安装ntp软件 [root@client ~]# yum -y install ntp # ...

  3. NTP客户端的设置

    LINUX做为客户端自动同步时间 如果想定时进行时间校准,可以使用crond服务来定时执行. 编辑 /etc/crontab 文件 加入下面一行:   30 8 * * * root /usr/sbi ...

  4. linux服务器ntp客户端配置【转】

    转自:https://www.cnblogs.com/kerrycode/archive/2015/08/20/4744804.html 在Linux系统中,为了避免主机时间因为在长时间运行下所导致的 ...

  5. 安装ntp服务,并设置ntp客户端

    1.yum安装ntp [root@localhost ~]# yum install ntp 2.修改配置文件 配置文件在/etc/ntp.conf

  6. C实现一个NTP客户端,可以从指定IP的NTP服务器获取时间戳

    参考::https://blog.csdn.net/dosthing/article/details/81588219 下面的代码测试通过 头文件 #include <sys/types.h&g ...

  7. H3C/华为交换机配置NTP客户端

    H3C clock timezone UTC add ntp-service unicast-server 1.1.1.1 //ntp服务器地址 clock protocol ntp ntp-serv ...

  8. ntp服务器搭建与客户端设置

    服务器对时间要求非常严格,linux服务器文件的生成,日志,以及数据库的连接都是根据时间的逻辑 进行任务处理,如果时间不同步,那么,处理的任务,以及出问题的分析日志,时间不对,很难分析 直接更改lin ...

  9. 华为交换机配置NTP服务端/客户端

    作者:邓聪聪 配置设备作为NTP服务器 单播客户端/服务器模式 # 配置NTP主时钟,层数为2. <HUAWEI> system-view [HUAWEI] ntp refclock-ma ...

随机推荐

  1. Linux 设置默认编辑器(以nano为例)

    查看nano地址 which nano output: /usr/bin/nano 设置默认编辑器 nano ~/.bashrc export EDITOR=nano alias vi=/usr/bi ...

  2. Oracle Nested table、Record

    1.如何在PL/SQL中创建和使用Nested table;2.如何在PL/SQL中创建和使用Record; 1.如何在PL/SQL中创建和使用Nested table DECLARE /**创建一个 ...

  3. 删除 Ceph 的image报rbd: error: image still has watchers

    在Ceph集群日常运维中,管理员可能会遇到有的image删除不了的情况,有一种情况是由于image下有快照信息,只需要先将快照信息清除,然后再删除该image即可,还有一种情况是因为该image仍旧被 ...

  4. 【转载】Jedis对管道、事务以及Watch的操作详细解析

    转载地址:http://blog.csdn.net/liyantianmin/article/details/51613772 1.Pipeline 利用pipeline的方式从client打包多条命 ...

  5. Hadoop分布式模式下SSH免密码登录

    1.Hadoop中为什么要配置免密码登录 最近在学习Hadoop,在集群中,Hadoop控制脚本依赖SSH来执行针对整个集群的操作.例如,某个脚本能够终止并重启集群中的所有守护进程.所以,需要安装SS ...

  6. RegularExpression

    目录 文章背景 目录 概述 基本概念 目的 特点 符号 实例 说明 参考文章 版本记录 layout: default title: RegularExpression category: [Tech ...

  7. 编写高质量代码改善C#程序的157个建议——建议147:重构多个相关属性为一个类

    建议147:重构多个相关属性为一个类 若存在多个相关属性,就应该考虑是否将其重构为一个类.查看如下类: class Person { public string Address { get; set; ...

  8. Oracle觸發器調用procedure寄信

    最近寫了一直Web Service給很多不同站的客戶端呼叫,并直接寄信通知程式中的異常. 直接在oracle中設置某張表的trigger(after insert),當有新的異常資料寫入時候,寄給相關 ...

  9. 数独高阶技巧之八——SDC

    在本系列的第四篇“简单异数链”中,向大家介绍了XY-Wing等一系列Wing类技巧,并提到可以用(拐弯的)数组的观念来理解这些结构,经过第六篇ALS的学习之后,大家回过头再去看Wing,应该可以发现相 ...

  10. [Perl][文件操作]判断文件是否为符号链接(Unicode路径)

    Win32API::File 判断文件/文件夹是否为符号链接 Win32::Unicode 好像无法做这方面的判断,只能判断是否为目录.文件.文件是否存在. Win32API::File 则支持 Ge ...