我需要軟件與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
提交
取消