Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки 11004 при получении текущего времени через `TIdDayTime` в Delphi

Delphi , Синтаксис , Дата и Время

Исправление ошибки 11004 при получении текущего времени через TIdDayTime в Delphi

В процессе разработки на Delphi и использовании компонентов для работы с сетью, разработчики могут столкнуться с различными проблемами, одной из которых является ошибка 11004 при попытке получить текущее время и дату из интернета. В данной статье мы рассмотрим, как исправить эту ошибку, используя примеры кода на Object Pascal.

Описание проблемы

Разработчик столкнулся с проблемой при использовании компонента TIdDayTime для получения текущего времени и даты из интернета. Приведенный ниже код приводит к ошибке с номером 11004:

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

Анализ проблемы

Ошибка 11004, известная как "bad address", указывает на то, что указанный хост или порт не существует или недоступен. В данном случае, использование префикса www. перед хостом time.windows.com является некорректным, так как сервер не существует в таком виде.

Подтвержденный ответ

Для корректной работы с протоколами, предназначенными для получения времени, необходимо использовать правильные порты и протоколы. TIdDayTime использует порт 13, но это протокол DayTime, который не является современным и не рекомендуется для использования. Вместо этого, следует использовать протокол NTP (Network Time Protocol), который работает на порту 123 (UDP) и является более надежным и точным.

Альтернативный ответ и решение проблемы

Для решения проблемы можно использовать компоненты Indy для работы с NTP. Ниже приведен пример кода, который демонстрирует использование TIdSNTP для синхронизации времени:

var
  SNTPClient: TIdSNTP;
begin
  SNTPClient := TIdSNTP.Create(nil);
  try
    SNTPClient.Host := 'pool.ntp.org';
    SNTPClient.SyncTime;
    Label1.Caption := DateTimeToStr(SNTPClient.DateTime);
  finally
    SNTPClient.Free;
  end;
end;

Также можно использовать компонент TIdSNTP в обработчике события таймера, чтобы регулярно обновлять время:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  IdSNTP1.SyncTime;
  Label1.Caption := DateTimeToStr(IdSNTP1.DateTime);
  Label2.Caption := IdSNTP1.Host;
end;

Заключение

Используя Indy и TIdSNTP, разработчики могут синхронизировать время на своей системе, избегая ошибок, связанных с неправильным использованием портов и протоколов. Важно помнить, что для современных приложений следует использовать NTP, а не устаревшие протоколы, такие как DayTime и Time.

Создано по материалам из источника по ссылке.

Проблема заключается в ошибке при использовании компонента `TIdDayTime` в Delphi для получения текущего времени из интернета, вызванной неправильным указанием хоста.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Дата и Время ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-10 17:59:54/0.0069918632507324/0