Heim >Backend-Entwicklung >C++ >Wie bekomme ich die aktuelle Netzwerkzeit von einem NTP -Server mit C#?

Wie bekomme ich die aktuelle Netzwerkzeit von einem NTP -Server mit C#?

DDD
DDDOriginal
2025-01-29 00:26:12869Durchsuche

How to Get the Current Network Time from an NTP Server using C#?

Netzwerkzeit von einem NTP -Server mit C#

abrufen

Diese 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!

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