UDP 経由のポート 123 がブロックされている場合、NTP データグラム パケットを取得できません。ただし、まだいくつかのオプションがあります。
解決策の 1 つは、使用可能な場合は、企業のファイアウォール内で NTP サーバーを使用することです。システム管理者または IT 部門に連絡する必要があります。
公開 Web サイトへの HTTP 接続を作成することもできます。例: http://www.ntp.org/、date HTTP ヘッダーの値を抽出してリモート クロック時刻をフェッチします。
HTTP ヘッダーは次のようになります。
HTTP/1.1 200 OK
Date: Fri, 07 Mar 2014 02:36:30 GMT
Content-Type: text/html
Connection: close
Server: Apache
Date HTTP ヘッダーは、標準エポック (1970 年 1 月 1 日) からのミリ秒単位の long 値に変換できる、そのリモート サーバーの時刻を 2 番目の解像度で提供します。
URL をフェッチし、日付ヘッダーを Java Date インスタンスに変換するコードのスニペットを次に示します。
URL url = new URL("http://www.ntp.org/");
URLConnection conn = url.openConnection();
if (conn instanceof HttpURLConnection) {
HttpURLConnection httpConn = (HttpURLConnection)conn;
httpConn.setRequestMethod("HEAD");
}
long dateTime = conn.getHeaderFieldDate("Date", 0);
if (dateTime > 0) {
Date receiveTime = new Date(dateTime);
// do something with remote timestamp
}
ファイアウォールの背後にある場合は、url.openConnection(proxy) 呼び出しに java.net.Proxy 引数を含めるか、JVM システム プロパティにプロキシを設定する必要があります。例: System.setProperty("http.proxyHost" ,"myproxy.org") など