Java NTP client

2022-09-02 03:50:49

我需要我的软件与 NTP 服务器通信以确定本地时钟偏移量。我尝试过使用org.apache.commons.net.ntp软件包,但是在Windows上运行时它的实现相当差,因为使用System.currentTimeMillis()来确定NTP数据包交换之前和之后的时间。您可能知道也可能不知道,此值仅在系统时钟滴答作响时才更新,在大多数现代Win2k3服务器上,此值为64Hz或每15.625ms更新一次。这极大地限制了时钟偏移计算的准确性。

Ntpd 使用 CPU 高频定时器在系统时钟周期之间进行插值,并实现更高的分辨率时间。您知道使用这种或类似技术的Java实现吗?或者你知道除了Apache之外的任何其他NTP实现吗?


答案 1

support.ntp.org 上有一个NTP Java实现


答案 2

由于这个问题在Google上的“Java NTP客户端”排名非常高:

Android有一个很好的,紧凑的Apache许可的简单NTP客户端实现:android.net.SntpClient

它需要修改才能在非Android java上运行,但这应该是微不足道的,因为代码大约是100行代码加上另外100行的详细注释,除了Android系统时钟之外没有外部依赖关系 - 而且偶然地,它已经准备好接受相对计时器,因为它已经使用了这样的相对计时器。nanoTime()


推荐