Исправление ошибки 11004 при получении текущего времени через TIdDayTime в Delphi
В процессе разработки на Delphi и использовании компонентов для работы с сетью, разработчики могут столкнуться с различными проблемами, одной из которых является ошибка 11004 при попытке получить текущее время и дату из интернета. В данной статье мы рассмотрим, как исправить эту ошибку, используя примеры кода на Object Pascal.
Описание проблемы
Разработчик столкнулся с проблемой при использовании компонента TIdDayTime для получения текущего времени и даты из интернета. Приведенный ниже код приводит к ошибке с номером 11004:
Ошибка 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 в обработчике события таймера, чтобы регулярно обновлять время:
Используя Indy и TIdSNTP, разработчики могут синхронизировать время на своей системе, избегая ошибок, связанных с неправильным использованием портов и протоколов. Важно помнить, что для современных приложений следует использовать NTP, а не устаревшие протоколы, такие как DayTime и Time.
Проблема заключается в ошибке при использовании компонента `TIdDayTime` в Delphi для получения текущего времени из интернета, вызванной неправильным указанием хоста.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.