Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/49: Рейтинг темы: голосов - 49, средняя оценка - 4.88
MKCoyote
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 1
1

Синхронизация времени с NTP сервера

07.04.2010, 01:38. Просмотров 9604. Ответов 5
Метки ntp (Все метки)

Подскажите,пожалуйста!Нужно получить время с сервера синхронизации времени ntp.mobatime.ru. Как это сделать?Ни разу такого не делал,поэтому не знаю даже с чего начать..В нэте ничего про это не нашел.

Добавлено через 9 минут
Мне нужно чтобы в моей программе часы синхронизировались с интернета,именно с интернета,системное время не подходит.Подскажите,как это сделать.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2010, 01:38
Ответы с готовыми решениями:

Получить время с NTP сервера
Задача следующая - получить точное время с рабочего (!) надежного (!) ntp сервера. Просто...

Организация проверки времени на получение ответа от прокси-сервера
Здравствуйте, товарищи-программисты. Программа занимается проверкой качества большого количества...

Синхронизация времени
Подскажите пожалуйста как в локальной базе данных синхронизировать время со временем системы...

Преобразование времени сервера
.....в время машины с которой осуществшяется вход на сайт??? http://aspspider.net/skierok/ ...

Нужно узнать, сколько времени пользователь провел на данной странице и затем записать данные в БД на стороне сервера.
Нужно узнать, сколько времени пользователь провел на данной странице и затем записать данные в БД...

5
PingWiN0x20
55 / 55 / 8
Регистрация: 13.05.2010
Сообщений: 105
17.05.2010, 14:39 2
Лучший ответ Сообщение было отмечено как решение

Решение

Пардон за некропост... Но может кому пригодится...
Получаем время по протоколу NTP.

C#
1
2
3
4
5
6
7
8
9
10
using System;
using System.IO;
using System.Net;
using System.Net;Sockets;
 
public static string GetTime()
{
    StreamReader rdr = new StreamReader(new TcpClient("132.163.4.102", 13).GetStream());
    return rdr.ReadToEnd();
}
Функция возвращает строку вида: JJJJJ YY-MM-DD HH:MM:SS aa b c ddd.d UTC(NIST).

Автор - Alastair Dallas, взято с CodeProject
4
IamFaultless
0 / 0 / 0
Регистрация: 03.07.2011
Сообщений: 3
04.07.2011, 00:28 3
у меня этот код не работает(( а нужно тоже получить время с инета, не делая тупо парсинг страницы, а по уму. с надежного ntp сервака. в чем проблема? почему функция возвращает пустую строку?? народ, помогите!
0
DMF
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 153
26.02.2016, 10:49 4
У меня на Windows CE Mobile .NET Compact Framework 3.5 заработал следующий код:
C#
1
2
3
4
5
6
7
8
9
10
11
        public static string GetTime()
        {
            byte[] ipByte = { 192, 168, 1, 254 };
            IPAddress ip = new IPAddress(ipByte);
            IPEndPoint ep = new IPEndPoint(ip, 13);
            TcpClient tc = new TcpClient();
            tc.Connect(ep);
            Stream st = tc.GetStream();
            StreamReader rdr = new StreamReader(st);
            return rdr.ReadToEnd();
        }
Вдруг кому пригодится.
1
Psilon
Master of Orion
Эксперт .NET
6050 / 4908 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
Завершенные тесты: 4
26.02.2016, 19:41 5
DMF, вот теперь это некропост

Добавлено через 6 минут
PingWiN0x20, алсо согласно википедии этот код не обязательно работает, не говоря уже о формате:
It is intended for testing and measurement purposes in computer networks.

A host may connect to a server that supports the Daytime Protocol on either Transmission Control Protocol (TCP) or User Datagram Protocol (UDP) port 13. The server returns an ASCII character string of the current date and time in an unspecified format.
Добавлено через 8 минут
Правильный способ получить дату по NTP:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
        public static DateTime GetNetworkTime()
        {
            const string ntpServer = "pool.ntp.org";
            // NTP message size - 16 bytes of the digest (RFC 2030)
            var ntpData = new byte[48];
 
            //Setting the Leap Indicator, Version Number and Mode values
            ntpData[0] = 0x1B; //LI = 0 (no warning), VN = 3 (IPv4 only), Mode = 3 (Client Mode)
 
            var addresses = Dns.GetHostEntry(ntpServer).AddressList;
 
            //The UDP port number assigned to NTP is 123
            var ipEndPoint = new IPEndPoint(addresses[0], 123);
            //NTP uses UDP
            using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
            {
                socket.Connect(ipEndPoint);
 
                //Stops code hang if NTP is blocked
                socket.ReceiveTimeout = 3000;
 
                socket.Send(ntpData);
                socket.Receive(ntpData);
            }
 
            //Offset to get to the "Transmit Timestamp" field (time at which the reply 
            //departed the server for the client, in 64-bit timestamp format."
            const byte serverReplyTime = 40;
 
            //Get the seconds part
            ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTime);
 
            //Get the seconds fraction
            ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTime + 4);
 
            //Convert From big-endian to little-endian
            intPart = SwapEndianness(intPart);
            fractPart = SwapEndianness(fractPart);
 
            var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
 
            //**UTC** time
            var networkDateTime = (new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddMilliseconds((long)milliseconds);
 
            return networkDateTime.ToLocalTime();
        }
 
        // stackoverflow.com/a/3294698/162671
        static uint SwapEndianness(ulong x)
        {
            return (uint)(((x & 0x000000ff) << 24) +
                           ((x & 0x0000ff00) << 8) +
                           ((x & 0x00ff0000) >> 8) +
                           ((x & 0xff000000) >> 24));
        }
1
DMF
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 153
29.02.2016, 10:28 6
Согласен. Но в том-то и суть, что не всегда есть доступ к глобальной сети и серверу NTP. Это лишь альтернативный метод - "костыль", так сказать, т.е., запасной. И то, подобный ответ не каждый сервер готов дать (время, я имею ввиду). А тот, что привели Вы - правильный.
0
29.02.2016, 10:28
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.02.2016, 10:28

Получение текущего значения мирового времени через службы NTP
Привет! Я использую приведенный ниже программный код для получения текущего значения мирового...

Установка системного времени по NTP
Добрый день. Подскажите пожалуйста, как реализовать установку системного времени по времени...

Синхронизация времени по NTP с корректировкой в миллисекундах
Всем доброго дня. Суть моей проблемы в следующем: попробовал с помощью (CMD/BAT) синхронизировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.