首页 > 其他 > 详细

Ntp客户端

时间:2019-04-30 12:39:01      阅读:173      评论:0      收藏:0      [点我收藏+]
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客户端

原文:https://www.cnblogs.com/zh33gl/p/10795298.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!