Maison > développement back-end > C++ > Comment interroger un serveur NTP pour la date et l'heure actuelles à l'aide de C #?

Comment interroger un serveur NTP pour la date et l'heure actuelles à l'aide de C #?

Barbara Streisand
Libérer: 2025-01-29 00:31:09
original
742 Les gens l'ont consulté

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

Utilisez C # pour interroger le serveur NTP: Solution complète

Cet article fournit une méthode fiable pour récupérer la date et l'heure actuelles du C # à partir du serveur NTP. Voici les étapes impliquées et une solution de code complète.

Cette méthode dépend du protocole de temps réseau (NTP), qui implique d'envoyer des messages de requête au serveur NTP. Le serveur répondra au message de réponse contenant l'heure actuelle. Ensuite, nous extrassons le temps de la réponse et le convertissons au format disponible.

<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>
Copier après la connexion
En utilisant ce code, vous pouvez facilement interroger le serveur NTP et obtenir la date et l'heure actuelles. Cette solution Traitement la conversion des commandes d'octets et fournit un moyen flexible de récupérer le temps de tout serveur NTP compatible. Faites attention à la correction de la fonction dans le code pour assurer la conversion d'ordre d'octet correct.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal