Heim >Backend-Entwicklung >C++ >Wie bekomme ich die aktuelle Netzwerkzeit von einem NTP -Server mit C#?
Netzwerkzeit von einem NTP -Server mit C#
abrufenDiese Anleitung zeigt eine einfache Methode, um die aktuelle Zeit von einem NTP -Server (Network Time Protocol) mit C#zu erhalten.
Hier ist der C# Code:
<code class="language-csharp">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)); } }</code>
Denken Sie daran, Ihrem Projekt using System.Net;
und using System.Net.Sockets;
hinzuzufügen. Diese verbesserte Version verwendet beschreibendere Variablennamen und klärt den Rückgabetyp der SwapEndianness
-Funktion für eine bessere Lesbarkeit und Wartbarkeit. Der Socket -Empfangsvorgang wird auch eine Zeitüberschreitung hinzugefügt, um eine unbestimmte Blockierung zu verhindern.
Das obige ist der detaillierte Inhalt vonWie bekomme ich die aktuelle Netzwerkzeit von einem NTP -Server mit C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!