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

如何使用C#查询NTP服务器?,第1张

如何使用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;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5462623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存