Heim >Backend-Entwicklung >C++ >Wie kann ich einen NTP -Server für das aktuelle Datum und die aktuelle Uhrzeit mit C#abfragen?

Wie kann ich einen NTP -Server für das aktuelle Datum und die aktuelle Uhrzeit mit C#abfragen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-29 00:31:09744Durchsuche

How to Query an NTP Server for Current Date and Time Using C#?

Verwenden Sie C#, um den NTP -Server abzufragen: Vollständige Lösung

Dieser Artikel bietet eine zuverlässige Methode zum Abrufen des aktuellen Datums und der aktuellen Uhrzeit aus dem C#vom NTP -Server. Hier sind die beteiligten Schritte und eine vollständige Codelösung.

Diese Methode hängt vom Netzwerkzeitprotokoll (NTP) ab, bei dem Abfragenachrichten an den NTP -Server gesendet werden. Der Server antwortet auf die Antwortmeldung, die die aktuelle Zeit enthält. Dann extrahieren wir die Zeit aus der Antwort und konvertieren sie in das verfügbare Format.

<code class="language-csharp">using System;
using System.Net;
using System.Net.Sockets;

public static class NTP
{
    public static DateTime GetNetworkTime()
    {
        const string ntpServer = "time.windows.com";
        const int ntpPort = 123;
        byte[] ntpData = new byte[48];

        ntpData[0] = 0x1B; // LI = 0, VN = 3, Mode = 3 (Client)

        using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
        {
            socket.Connect(new IPEndPoint(Dns.GetHostEntry(ntpServer).AddressList[0], ntpPort));

            socket.Send(ntpData);
            socket.Receive(ntpData);
        }

        const int serverReplyTime = 40;
        ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTime);
        ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTime + 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();
    }

    private static ulong SwapEndianness(ulong x)
    {
        return (ulong)(
            ((x & 0x000000ff) << 24) |
            ((x & 0x0000ff00) << 8) |
            ((x & 0x00ff0000) >> 8) |
            ((x & 0xff000000) >> 24)
        );
    }
}</code>
Mit diesem Code können Sie den NTP -Server problemlos abfragen und das aktuelle Datum und die aktuelle Uhrzeit erhalten. Diese Lösungsverarbeitungs -Byte -Auftragskonversion bietet eine flexible Möglichkeit, Zeit von einem kompatiblen NTP -Server abzurufen. Achten Sie auf die Korrektur der -Funktion im Code, um die korrekte Umwandlung von Byte -Bestellung zu gewährleisten.

Das obige ist der detaillierte Inhalt vonWie kann ich einen NTP -Server für das aktuelle Datum und die aktuelle Uhrzeit mit C#abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn