Bob32 Опубликовано 5 апреля, 2019 Поделиться Опубликовано 5 апреля, 2019 Добрый день! подскажите пожалуйста, а есть компоненты, либо другой проверенный способ, чтобы получать точное время от каких-либо централизованных служб в Инете? мне нужно синхронизировать по времени события на разных телефонах. Цитата Ссылка на комментарий
0 krapotkin Опубликовано 5 апреля, 2019 Поделиться Опубликовано 5 апреля, 2019 если даже не использовать NTP При каждом HTTP запросе в ответе приходят заголовки. Например Connection: keep-alive Strict-Transport-Security: max-age=0 Content-Encoding: Content-Type: text/html; charset=utf-8 Date: Fri, 05 Apr 2019 07:02:28 GMT Server: nginx Bob32 1 Цитата Ссылка на комментарий
0 Bob32 Опубликовано 5 апреля, 2019 Автор Поделиться Опубликовано 5 апреля, 2019 4 часа назад, krapotkin сказал: если даже не использовать NTP При каждом HTTP запросе в ответе приходят заголовки. Например Connection: keep-alive Strict-Transport-Security: max-age=0 Content-Encoding: Content-Type: text/html; charset=utf-8 Date: Fri, 05 Apr 2019 07:02:28 GMT Server: nginx Те - брать и читать какой-нить урл и брать время из заголовков? А NTP время как отдают? Может есть у кого-то пример кода? Цитата Ссылка на комментарий
0 krapotkin Опубликовано 5 апреля, 2019 Поделиться Опубликовано 5 апреля, 2019 TIdTime is a client implementation of the Time Protocol as described in the Internet Standards document:RFC 868 - Time Protocol (http://www.rfc-editor.org/rfc/rfc868.txt)Time is a simple protocol for synchronizing time on a local network. For a time protocol with higher accuracy over several networks, use TIdSNTP. To retrieve the current date and time in human-readable form, use TIdDayTime.Please note that the Time Protocol in its current form cannot handle most dates after the year 2035. This limitation is stated in RFC 868. Bob32, dnekrasov и Ingalime 2 1 Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 5 апреля, 2019 Поделиться Опубликовано 5 апреля, 2019 Протокол SNTP Помимо NTP, существует упрощенная версия этого протокола - SNTP (Simple Network Time Protocol). Он реализован для синхронизации времени конечным клиентом, поскольку все преимущества протокола NTP проявляются именно в сети серверов, а для получения показаний конечным пользователем NTP излишне сложен. Поэтому для синхронизации времени конечными компьютерами и серверами был предложен протокол SNTP (SNTPv3: 1992 г., RFC1361 и 1995 г., RFC1769; SNTPv4 включён как подпротокол в NTPv4). На самом деле SNTP - это не новый протокол, а способ использования NTP-пакетов и NTP-серверов в приложениях, где не требуется высокоточное время, либо оно недостижимо. В этом случае клиент использует только часть информации UDP-пакета NTP-сервера. SNTP-клиент может работать с любыми версиями NTP-серверов, и кроме них - с особыми SNTP-серверами, которые в откликах заполняют только необходимые данные UDP-пакета. Таким образом, "облегченный" SNTP образует не сеть синхронизирующихся серверов, а пары "клиент-сервер". Любой NTP-сервер является одновременно SNTP-сервером. Клиент, который не передаёт полученное время дальше, может работать как NTP- или SNTP-клиент, в зависимости от условий. Для SNTP, как и для NTP, зарезервирован 123-й UDP-порт. Uses IdSNTP, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient; .... procedure TForm1.Button2Click(Sender: TObject); Var IdSNTP: TIdSNTP; begin IdSNTP:=TIdSNTP.Create(Self); IdSNTP.Host := 'ntp1.stratum2.ru'; ShowMessage(DateTimeToStr(IdSNTP.DateTime)); IdSNTP.Free; end; Maximus, Bob32, dnekrasov и 2 других 4 1 Цитата Ссылка на комментарий
0 Bob32 Опубликовано 6 апреля, 2019 Автор Поделиться Опубликовано 6 апреля, 2019 Ребят, спасибо Вам огромное!!! Цитата Ссылка на комментарий
0 Bob32 Опубликовано 6 апреля, 2019 Автор Поделиться Опубликовано 6 апреля, 2019 10 часов назад, Евгений Корепов сказал: Протокол SNTP Помимо NTP, существует упрощенная версия этого протокола - SNTP (Simple Network Time Protocol). Он реализован для синхронизации времени конечным клиентом, поскольку все преимущества протокола NTP проявляются именно в сети серверов, а для получения показаний конечным пользователем NTP излишне сложен. Поэтому для синхронизации времени конечными компьютерами и серверами был предложен протокол SNTP (SNTPv3: 1992 г., RFC1361 и 1995 г., RFC1769; SNTPv4 включён как подпротокол в NTPv4). На самом деле SNTP - это не новый протокол, а способ использования NTP-пакетов и NTP-серверов в приложениях, где не требуется высокоточное время, либо оно недостижимо. В этом случае клиент использует только часть информации UDP-пакета NTP-сервера. SNTP-клиент может работать с любыми версиями NTP-серверов, и кроме них - с особыми SNTP-серверами, которые в откликах заполняют только необходимые данные UDP-пакета. Таким образом, "облегченный" SNTP образует не сеть синхронизирующихся серверов, а пары "клиент-сервер". Любой NTP-сервер является одновременно SNTP-сервером. Клиент, который не передаёт полученное время дальше, может работать как NTP- или SNTP-клиент, в зависимости от условий. Для SNTP, как и для NTP, зарезервирован 123-й UDP-порт. Uses IdSNTP, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient; .... procedure TForm1.Button2Click(Sender: TObject); Var IdSNTP: TIdSNTP; begin IdSNTP:=TIdSNTP.Create(Self); IdSNTP.Host := 'ntp1.stratum2.ru'; ShowMessage(DateTimeToStr(IdSNTP.DateTime)); IdSNTP.Free; end; Спасибо огромное персонально! Все работает! Но время отдается в каком-то американском часовом поясе (отличается от московского на 10 часов). хелп на класс TIdSNTP у меня почему-то отсутствует. ( можно конечно по колхозному к московскому времени привести, но может есть более правильный метод (или свойство) этого класса? Цитата Ссылка на комментарий
0 GASCHE Опубликовано 6 апреля, 2019 Поделиться Опубликовано 6 апреля, 2019 55 минут назад, Bob32 сказал: Но время отдается в каком-то американском часовом поясе У меня совпадает с московским Цитата Ссылка на комментарий
0 Bob32 Опубликовано 6 апреля, 2019 Автор Поделиться Опубликовано 6 апреля, 2019 Стоял левый часовой пояс в настройках телефона. Поставил московский -время изменилось но, снова не в том часовом поясе. Сейчас показывает 7:27, а должно 13:27 Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 6 апреля, 2019 Поделиться Опубликовано 6 апреля, 2019 28 минут назад, Bob32 сказал: Стоял левый часовой пояс в настройках телефона. Поставил московский -время изменилось но, снова не в том часовом поясе. Сейчас показывает 7:27, а должно 13:27 Посмотрите исходники модуля IdSNTP - там все достаточно просто (всего 300 строк кода). Может пошаговый дебаг поможет понять откуда берется ошибка. На винде у меня правильное время отдает, на андроиде не пробовал. Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 6 апреля, 2019 Поделиться Опубликовано 6 апреля, 2019 (изменено) 50 минут назад, Bob32 сказал: Стоял левый часовой пояс в настройках телефона. Поставил московский -время изменилось но, снова не в том часовом поясе. Сейчас показывает 7:27, а должно 13:27 Какая версия среды у вас и какая версия Indy? Возможно проблема в старой версии Indy, погуглите "delphi indy OffsetFromUTC" - там были какие то проблемы, и вроде они исправлены. У меня вот такая версия (в Rio с последним апдейтом). Узнать версию - киньте любой компонент Indy на форму, правой кнопкой по компоненту и About. Повторюсь - на андроиде я не проверял правильность работы. Изменено 6 апреля, 2019 пользователем Евгений Корепов Цитата Ссылка на комментарий
0 Bob32 Опубликовано 6 апреля, 2019 Автор Поделиться Опубликовано 6 апреля, 2019 1 час назад, Евгений Корепов сказал: Какая версия среды у вас и какая версия Indy? Возможно проблема в старой версии Indy, погуглите "delphi indy OffsetFromUTC" - там были какие то проблемы, и вроде они исправлены. У меня вот такая версия (в Rio с последним апдейтом). Узнать версию - киньте любой компонент Indy на форму, правой кнопкой по компоненту и About. Повторюсь - на андроиде я не проверял правильность работы. Версия, такая же, как у Вас. попробую вот это как стемнеет ) Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 6 апреля, 2019 Поделиться Опубликовано 6 апреля, 2019 45 минут назад, Bob32 сказал: Версия, такая же, как у Вас. попробую вот это как стемнеет ) Интересно! Обязательно сообщите результаты! ))) Цитата Ссылка на комментарий
0 Bob32 Опубликовано 11 апреля, 2019 Автор Поделиться Опубликовано 11 апреля, 2019 В 06.04.2019 в 16:19, Евгений Корепов сказал: Интересно! Обязательно сообщите результаты! ))) руки дошли только сегодня и то пока криво ) файл нашел, скопировал в директорию проекта, и там отредактировал. но этот файл IdGlobalProtocols.pas - это не в чистом виде модуль библиотеки Indi. Что значит "add the edited file to your project"? просто списать в каталог проекта - этого вероятно будет недостаточно ) Цитата Ссылка на комментарий
0 Bob32 Опубликовано 11 апреля, 2019 Автор Поделиться Опубликовано 11 апреля, 2019 В 06.04.2019 в 16:19, Евгений Корепов сказал: Интересно! Обязательно сообщите результаты! ))) а если заменить исходный файл - то как перекомпилить Инди? Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 11 апреля, 2019 Поделиться Опубликовано 11 апреля, 2019 (изменено) 4 часа назад, Bob32 сказал: руки дошли только сегодня и то пока криво ) файл нашел, скопировал в директорию проекта, и там отредактировал. но этот файл IdGlobalProtocols.pas - это не в чистом виде модуль библиотеки Indi. Что значит "add the edited file to your project"? просто списать в каталог проекта - этого вероятно будет недостаточно ) Просто закиньте в паку с проектом, этого думаю достаточно. P.S. для проверки напечатайте какую нибудь явную ересь в этом файле - если компилер ругнется на ошибку, значит он нужный файл подключает к проекту. Изменено 11 апреля, 2019 пользователем Евгений Корепов Цитата Ссылка на комментарий
Вопрос
Bob32
Добрый день!
подскажите пожалуйста, а есть компоненты, либо другой проверенный способ, чтобы получать точное время от каких-либо централизованных служб в Инете?
мне нужно синхронизировать по времени события на разных телефонах.
Ссылка на комментарий
15 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.