4

次のコードを使用して、パブリック タイム サーバーから時刻を取得しようとしています。

package aaa;

import java.util.Arrays;
import java.util.List;

import org.apache.commons.net.TimeTCPClient;

public final class Main
{
    public static java.util.Date getNTPDate() {
        List<String> hosts = Arrays.asList("0.pool.ntp.org");

        for (String host : hosts) {
            TimeTCPClient client = new TimeTCPClient();
            // We want to timeout if a response takes longer than 5 seconds
            client.setDefaultTimeout(5000);
            try {
                client.connect(host);
                java.util.Date ntpDate = client.getDate();
                client.disconnect();
                // Just to be extra caution.
                if (ntpDate != null) {
                    return ntpDate;
                }
            }
            catch (java.net.SocketException exp) {
                exp.printStackTrace();
            }
            catch (java.io.IOException exp) {
                exp.printStackTrace();
            }
        }
        return null;
    }

    public static final void main(String[] args)
    {
        System.out.println(getNTPDate());
    }

}

しかし、いつも、私は得ていますjava.net.ConnectException: Connection timed out: connect

いくつかの異なるタイムサーバーをグーグルで検索しようとしました。ただし、どれも機能しません。問題は私のコードにあるのか、それとも選択したサーバーにあるのでしょうか?

4

3 に答える 3

10

NTP は、タイム プロトコルとは異なるプロトコルです。NTP サーバーは、ポート UDP/123 でのみ通信します。タイム サーバーは TCP/37 を使用します (TimeTCPClient は正しく実装されているようです)。

リモート時刻を取得したい場合は、適切なサーバーを使用してください (ntp.xs4all.nl時刻ポートをリッスンしているようです)。

于 2011-08-16T18:53:11.440 に答える