Récupération du temps du réseau à partir d'un serveur NTP avec C #
Ce guide montre une méthode simple pour obtenir l'heure actuelle à partir d'un serveur NTP (Network Time Protocol) en utilisant C #.
Voici le code C #:
<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>
N'oubliez pas d'ajouter using System.Net;
et using System.Net.Sockets;
à votre projet. Cette version améliorée utilise des noms de variables plus descriptifs et clarifie le type de retour de la fonction SwapEndianness
pour une meilleure lisibilité et maintenabilité. Un délai d'expiration est également ajouté à l'opération de réception de la prise pour éviter le blocage indéfini.
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!