.NET 4.x Время с сервера - C#

Узнай цену своей работы

Формулировка задачи:

Как можно отобразить время с центрального пк т.е., сервера, если приложение запускается на другом пк?

Решение задачи: «.NET 4.x Время с сервера»

textual
Листинг программы
  1. public static DateTime GetNetworkTimeUtc(string ntpServer = "time.nist.gov")
  2. {
  3.     // NTP message size - 16 bytes of the digest (RFC 2030)
  4.     var ntpData = new byte[48];
  5.  
  6.     //Setting the Leap Indicator, Version Number and Mode values
  7.     ntpData[0] = 0x1B; //LI = 0 (no warning), VN = 3 (IPv4 only), Mode = 3 (Client Mode)
  8.  
  9.     var addresses = Dns.GetHostEntry(ntpServer).AddressList;
  10.  
  11.     // NTP работает через UDP и использует порт 123
  12.     var ipEndPoint = new IPEndPoint(addresses[0], 123);
  13.     using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
  14.     {
  15.         socket.Connect(ipEndPoint);
  16.  
  17.         //Stops code hang if NTP is blocked
  18.         socket.ReceiveTimeout = 3000;
  19.  
  20.         socket.Send(ntpData);
  21.         socket.Receive(ntpData);
  22.     }
  23.  
  24.     //Offset to get to the "Transmit Timestamp" field (time at which the reply
  25.     //departed the server for the client, in 64-bit timestamp format."
  26.     const byte serverReplyTime = 40;
  27.  
  28.     // Get the seconds part
  29.     ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTime);
  30.  
  31.     // Get the seconds fraction
  32.     ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTime + 4);
  33.  
  34.     //Convert From big-endian to little-endian
  35.     intPart = SwapEndianness(intPart);
  36.     fractPart = SwapEndianness(fractPart);
  37.  
  38.     var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
  39.     return (new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddMilliseconds((long)milliseconds);
  40. }
  41.  
  42. // Convert From big-endian to little-endian
  43. // [url]http://stackoverflow.com/a/3294698/162671[/url]
  44. static uint SwapEndianness(ulong x)
  45. {
  46.     return (uint)(((x & 0x000000ff) << 24) +
  47.                    ((x & 0x0000ff00) << 8) +
  48.                    ((x & 0x00ff0000) >> 8) +
  49.                    ((x & 0xff000000) >> 24));
  50. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы