Синхронизировать время с серверами в Интернете

Для синхронизации времени в сетях с переменной латентностью был разработан протокол NTP. В пользовательских программах обычно не требуется высокой точности, поэтому используется более простой протокол SNTP.

Сервера точного времени, отвечающие по протоколу NTP поддерживают и SNTP.

Протокол реализован во множестве библиотек для Delphi. 

Например, Indy содержит компонент idSNTP:

 // Настройка
 IdSNTP1.Host := 'time.windows.com'; // сервер точного времени
 IdSNTP1.Port := 123;
 IdSNTP1.ReceiveTimeout := 5000;
 // выведем разницу между локальным временем и данными сервера ntp
 Memo3.Lines.Add(Format('%1.3f', [(Now - IdSNTP1.DateTime)*24*3600]));
 // Попытаемся синхронизировать время и выведем удалось или нет
 Memo3.Lines.Add(BoolToStr(IdSNTP1.SyncTime, true));
 // Повторно выведем разнице между локальным временем и данными сервера ntp
 Memo3.Lines.Add(Format('%1.3f', [(Now - IdSNTP1.DateTime)*24*3600]));
Метки: