zoukankan      html  css  js  c++  java
  • Ntp客户端

    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;
    }
    
  • 相关阅读:
    2804 最大最小数质因数
    5429 多重背包
    1851 越狱
    Gvim使用
    3622 假期
    4906 删数问题
    2845 排序的代价
    poj 3352
    常用正则表达式汇总
    功能简单例子
  • 原文地址:https://www.cnblogs.com/zh33gl/p/10795298.html
Copyright © 2011-2022 走看看