连接到NTP服务器会出现故障(Java)

时间:2009-08-04 01:40:48

标签: java networking ntp

我正在学习如何使用Java进行网络连接,第一个从NTP服务器获取时间的简单示例不断抛出ConnectException。我将复制并粘贴代码,但我觉得它必须是与代码无关的东西,因为这段代码来自一本书。

import java.io.*;
import java.net.*;

public class AskTime {

    public static void main(String a[]) throws Exception {
        if(a.length != 1) {
            System.out.println("your lame");
            System.exit(0);
        }

        String machine = a[0];
        final int daytimeport = 13;
        Socket so = new Socket(machine,daytimeport);
        BufferedReader br = new BufferedReader(new InputStreamReader(so.getInputStream() ) );
        String time = br.readLine();
        System.out.printf("%s says it is %s %n", machine, time);
    }
}

我用来执行此命令的命令是:

java AskTime us.pool.ntp.org

更新:在阅读msaeed的建议后,我将端口更改为123,现在被告知连接被拒绝而不是连接超时。所以我认为msaeed是对的,有没有人知道我还需要什么来沟通以获得时间?

2 个答案:

答案 0 :(得分:4)

显然,此代码使用使用端口13的旧DAYTIME protocolNTP protocol使用端口123并需要更多通信。许多NTP服务器停止支持DAYTIME次查询。

NTP项目为Java here中的NTP客户端提供了示例代码。

答案 1 :(得分:1)

msaeed 是对的。您可以将代码用于DAYTIME服务器,例如'time.nist.gov' - 或者从this list

中选择任何其他代码

更新如果您的最终目标是与NTP服务器通信(而不是像您最初所说的那样使用套接字),那么您应该查看Commons Net。事实上,您应该以任何方式查看其来源 - Commons Net实现了相当多的网络协议。