我需要软件与NTP服务器通信以确定本地时钟偏移。我曾尝试使用org.apache.commons.net.ntp程序包,但由于在Windows上运行时它的实现效果很差,因为使用System.currentTimeMillis()来确定NTP数据包交换之前和之后的时间。您可能知道,也可能不知道,该值仅在系统时钟滴答时更新,在大多数现代Win2k3服务器上,频率为64Hz或每15.625ms。这极大地限制了时钟偏移计算的准确性。Ntpd使用CPU高频计时器在系统时钟滴答之间进行插值,并获得更高的分辨率时间。您知道使用这种技术或类似技术的Java实现吗?还是您知道除Apache以外的其他任何NTP实现?
3 回答
慕后森
TA贡献1802条经验 获得超5个赞
由于此问题在Google上对于“ Java NTP客户端”的排名很高:
Android具有一个简单的NTP客户端的漂亮,紧凑的Apache许可实现:android.net.SntpClient。
它需要进行修改才能在非Android Java上运行,但这应该是微不足道的,因为该代码约为100行代码加上另外100行详细注释,除了Android系统时钟外没有任何外部依赖关系-偶然,nanoTime()因为它已经使用了此类相对计时器,所以可以接受相对计时器。
慕工程0101907
TA贡献1887条经验 获得超5个赞
如果您使用的是Java 5或更高版本,可以使用System.nanoTime()来更精确地测量时间偏移吗?您必须修改现有的NTP代码,但是您应该拥有它的源代码,而且我并不认为这很困难。
添加回答
举报
0/150
提交
取消