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
Freigeben: 2025-01-29 00:26:12
Original
884 Leute haben es durchsucht

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:

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));
    }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage