我正在学习如何使用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是对的,有没有人知道我还需要什么来沟通以获得时间?
答案 0 :(得分:4)
显然,此代码使用使用端口13的旧DAYTIME
protocol。NTP
protocol使用端口123并需要更多通信。许多NTP
服务器停止支持DAYTIME
次查询。
NTP项目为Java here中的NTP
客户端提供了示例代码。
答案 1 :(得分:1)
msaeed 是对的。您可以将代码用于DAYTIME服务器,例如'time.nist.gov' - 或者从this list
中选择任何其他代码更新如果您的最终目标是与NTP服务器通信(而不是像您最初所说的那样使用套接字),那么您应该查看Commons Net。事实上,您应该以任何方式查看其来源 - Commons Net实现了相当多的网络协议。