Mendapatkan masa rangkaian dari pelayan NTP dengan C#
Panduan ini menunjukkan kaedah mudah untuk mendapatkan masa semasa dari pelayan NTP (Rangkaian Masa Protokol) menggunakan C#.inilah kod c#:
using System; using System.Net; using System.Net.Sockets; public static class NetworkTime { public static DateTime GetNetworkTime() { const string ntpServer = "time.windows.com"; // Or another NTP server const int ntpDataSize = 48; const int serverReplyTimeOffset = 40; byte[] ntpData = new byte[ntpDataSize]; IPAddress[] addresses = Dns.GetHostEntry(ntpServer).AddressList; using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) { IPEndPoint ipEndPoint = new IPEndPoint(addresses[0], 123); socket.Connect(ipEndPoint); socket.ReceiveTimeout = 3000; // 3-second timeout socket.Send(ntpData); socket.Receive(ntpData); } ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTimeOffset); ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTimeOffset + 4); intPart = SwapEndianness(intPart); fractPart = SwapEndianness(fractPart); long milliseconds = (long)(intPart * 1000) + (long)((fractPart * 1000) / 0x100000000L); DateTime networkDateTime = new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(milliseconds); return networkDateTime.ToLocalTime(); } static uint SwapEndianness(ulong x) { return (uint)(((x & 0x000000ff) << 24) + ((x & 0x0000ff00) << 8) + ((x & 0x00ff0000) >> 8) + ((x & 0xff000000) >> 24)); } }
dan using System.Net;
ke projek anda. Versi yang lebih baik ini menggunakan lebih banyak nama pemboleh ubah deskriptif dan menjelaskan jenis pulangan fungsi using System.Net.Sockets;
untuk kebolehbacaan dan kebolehkerjaan yang lebih baik. Masa tamat juga ditambah ke soket menerima operasi untuk mengelakkan penyekatan tidak terbatas. SwapEndianness
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan masa rangkaian semasa dari pelayan NTP menggunakan C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!