21

ローカル クロック オフセットを決定するために NTP サーバーと通信するソフトウェアが必要です。org.apache.commons.net.ntp パッケージを使用してみましたが、NTP パケット交換の前後の時間を決定するために System.currentTimeMillis() を使用するため、Windows で実行する場合の実装はかなり貧弱です。ご存じないかもしれませんが、この値は、最新の Win2k3 サーバーでは 64Hz または 15.625ms ごとにシステム クロックが刻々と変化するときにのみ更新されます。これにより、クロック オフセット計算の精度が大幅に制限されます。

Ntpd は、CPU 高頻度タイマーを使用してシステム クロック ティック間を補間し、はるかに高い分解能時間を達成します。この手法または類似の手法を使用する Java 実装を知っていますか? または、Apache 以外の NTP 実装を知っていますか?

4

5 に答える 5

11

support.ntp.orgに NTP Java 実装があります。

于 2009-05-29T09:49:28.523 に答える
10

この質問は、「Java NTP クライアント」について Google で非常に高くランク付けされているため、次のようになります。

Android には、単純な NTP クライアントであるandroid.net.SntpClientの優れたコンパクトな Apache ライセンスの実装があります。

Android 以外の Java で実行するように変更する必要がありますが、コードは約 100 行のコードと 100 行の詳細なコメントで構成され、Android システム クロック以外の外部依存関係がないため、これは些細なことです。 、nanoTime()すでにそのような相対タイマーを使用しているため、相対タイマーを受け入れる準備ができています。

于 2013-06-15T09:48:36.753 に答える
4

使用できる Java 実装 (Java 7) を作成しました: SntpClient

于 2014-11-27T17:05:21.893 に答える
3

Java 5 以降を使用している場合、System.nanoTime()を使用して時間オフセットのより正確な測定を実行できますか? 既存の NTP コードを変更する必要がありますが、そのソースを入手する必要があります。これは難しいことではないと思います。

于 2009-05-29T09:47:34.207 に答える