Java NTP клиент - PullRequest
       17

Java NTP клиент

19 голосов
/ 29 мая 2009

Мне нужно, чтобы мое программное обеспечение взаимодействовало с NTP-сервером для определения смещения локальных часов. Я попытался использовать пакет org.apache.commons.net.ntp, но его реализация при работе в Windows довольно плохая из-за использования System.currentTimeMillis () для определения времени до и после обмена пакетами NTP. Как вы можете знать, а может и не знать, это значение обновляется только при тиках системных часов, которые на большинстве современных серверов Win2k3 имеют частоту 64 Гц или каждые 15,625 мс. Это значительно ограничивает точность расчета смещения тактовой частоты.

Ntpd использует высокочастотный таймер ЦП для интерполяции между тактами системных часов и достижения более высокого времени разрешения. Знаете ли вы о реализации Java, которая использует эту или аналогичную технику? Или вы знаете о какой-либо другой реализации NTP, кроме Apache?

Ответы [ 4 ]

10 голосов
/ 29 мая 2009

есть реализация NTP Java на support.ntp.org

9 голосов
/ 15 июня 2013

Поскольку этот вопрос очень высоко оценивается в Google как «Java NTP client»:

В Android реализована приятная компактная реализация простого NTP-клиента по лицензии Apache: android.net.SntpClient .

Его необходимо изменить, чтобы он работал на Java, отличной от Android, но это должно быть тривиально, поскольку код содержит около 100 строк кода плюс еще 100 строк подробных комментариев, без внешних зависимостей, кроме системных часов Android - и случайно он готов принять относительные таймеры, такие как nanoTime(), поскольку он уже использует такой относительный таймер.

3 голосов
/ 27 ноября 2014

Я написал реализацию Java (Java 7), которую вы можете использовать: SntpClient

3 голосов
/ 29 мая 2009

Если вы используете Java 5 или выше, можете ли вы использовать System.nanoTime () для более точного измерения смещений времени? Вам нужно изменить существующий код NTP, но у вас должен быть его источник, и я не ожидаю, что это будет сложно.

...