2

我只是在学习如何在 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 是对的,有人知道我还需要沟通什么来接收时间吗?

4

2 回答 2

4

所以显然这段代码使用了使用端口 13 的旧DAYTIME协议。NTP协议使用端口 123,需要更多的通信。许多NTP服务器停止支持DAYTIME查询。

NTP 项目在此处NTP为Java 客户端提供了示例代码。

于 2009-08-04T02:08:14.253 回答
1

msaeed是对的。您可以将您的代码与“time.nist.gov”之类的 DAYTIME 服务器一起使用 - 或从此列表中选择任何其他

更新如果您的最终目标是与 NTP 服务器通信(而不是像您最初所说的那样使用套接字),您应该查看Commons Net。事实上,无论哪种方式,您都应该查看它的源代码——Commons Net 实现了相当多的网络协议。

于 2009-08-04T02:14:14.903 回答