栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用C#查询NTP服务器?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用C#查询NTP服务器?

由于旧的答案被删除了(它是指向不再存在的Google代码搜索结果的链接),我认为我可以回答这个问题以供将来参考:

public static DateTime GetNetworkTime(){    //default Windows time server    const string ntpServer = "time.windows.com";    // NTP message size - 16 bytes of the digest (RFC 2030)    var ntpData = new byte[48];    //Setting the Leap Indicator, Version Number and Mode values    ntpData[0] = 0x1B; //LI = 0 (no warning), VN = 3 (IPv4 only), Mode = 3 (Client Mode)    var addresses = Dns.GetHostEntry(ntpServer).AddressList;    //The UDP port number assigned to NTP is 123    var ipEndPoint = new IPEndPoint(addresses[0], 123);    //NTP uses UDP    using(var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))    {        socket.Connect(ipEndPoint);        //Stops pre hang if NTP is blocked        socket.ReceiveTimeout = 3000;        socket.Send(ntpData);        socket.Receive(ntpData);        socket.Close();    }    //Offset to get to the "Transmit Timestamp" field (time at which the reply     //departed the server for the client, in 64-bit timestamp format."    const byte serverReplyTime = 40;    //Get the seconds part    ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTime);    //Get the seconds fraction    ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTime + 4);    //Convert From big-endian to little-endian    intPart = SwapEndianness(intPart);    fractPart = SwapEndianness(fractPart);    var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);    //**UTC** time    var networkDateTime = (new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddMilliseconds((long)milliseconds);    return networkDateTime.ToLocalTime();}// stackoverflow.com/a/3294698/162671static uint SwapEndianness(ulong x){    return (uint) (((x & 0x000000ff) << 24) +        ((x & 0x0000ff00) << 8) +        ((x & 0x00ff0000) >> 8) +        ((x & 0xff000000) >> 24));}

注意: 您将必须添加以下名称空间

using System.Net;using System.Net.Sockets;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470780.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号