Получите интернет-время в Дельфах - PullRequest
5 голосов
/ 28 ноября 2010

я хочу получить время и дату из интернета

я использовал следующий код

IdDayTime1.ReadTimeout := 5000;
IdDayTime1.Host := 'www.time.windows.com';
IdDayTime1.Port := 37     ;
Label1.Caption := IdDayTime1.DayTimeStr;

но я получаю: ошибка сокета # 11004

я сделал не так

мой интернет и другие вещи в порядке

Ответы [ 5 ]

8 голосов
/ 28 ноября 2010

DayTime протокол не является протоколом NTP . DayTime использует порт 13, а не 37. 37 используется протоколом Time , который, опять же, не в протоколе NTP, который использует 123 (UDP),Я не знаю, поддерживает ли time.windows.com протоколы DayTime и Time , наиболее распространенные протоколы для получения времени из надежного источника времени в настоящее время - NTP и его более простой одноуровневый SNTP, который заменил протоколы DayTime и Time.

2 голосов
/ 28 ноября 2010

Ошибка сокета 11004 означает «неверный адрес». Вам нужно избавиться от префикса www. , правильный адрес - time.windows.com .

1 голос
/ 28 августа 2012

Если вы получаете время и дату, используйте компонент Indy IdSNTP и установите: host: time.windows.com

и при событии Timer1Timer (компонент TTimer) напишите:

Label1.Caption := DateToStr(IdSNTP1.DateTime)
   + ' - ' + TimeToStr(IdSNTP1.DateTime);
Label2.Caption := IdSNTP1.Host;

, который вы видите в форме (labe1), label2) Дата сейчас И Время сейчас.Поэтому, если вы установите синхронизированное время, укажите IdSNTP1.SyncTime; в событии Timer1Timer.

1 голос
/ 29 ноября 2010

Вот простой код, показывающий использование компонентов idSNTP

var
  SNTPClient: TIdSNTP;
begin
  SNTPClient := TIdSNTP.Create(nil);
  try
    SNTPClient.Host := 'pool.ntp.org';
    SNTPClient.SyncTime;
  finally
    SNTPClient.Free;
  end;
end;
0 голосов
/ 28 ноября 2010

Попробуйте использовать клиентские компоненты Indy ntp с серверами ntp pool.org.Работает у меня, если у вас возникнут проблемы, я выложу пример кода.

...