【问题标题】:Java HTTP client getting time from NTP server [duplicate]Java HTTP客户端从NTP服务器获取时间[重复]
【发布时间】:2022-01-14 23:44:55
【问题描述】:

我正在尝试编写一个 HTTP 客户端,我需要从我在这里找到的 NTP 服务器获取时间:https://tf.nist.gov/tf-cgi/servers.cgi

这是我的 Java 代码:

String getTime(){
    String time = "";
    try{
        Socket timeSocket = new Socket("time-a-g.nist.gov",37);
        BufferedReader timeIn = new BufferedReader(new InputStreamReader(timeSocket.getInputStream()));
        time = timeIn.readLine();
        timeSocket.close();
        timeIn.close();
    }
    catch(IOException e){
        e.printStackTrace();
    }
    return time;
}

我没有收到任何错误,但我返回的字符串为空,有人可以帮忙吗?

【问题讨论】:

标签: java sockets protocols ntp


【解决方案1】:

您要连接的 TCP(和 UDP)端口 37 用于 TIME 协议 (RFC 868)。在此协议中,时间以网络字节顺序的单个二进制 32 位整数形式发送。

UDP 端口 123 用于NTP 协议(RFCs 1059111913055905)。在此协议中,时间以一系列二进制消息的形式发送。

您无法使用 BufferedReader.ReadLine() 将这两种类型的数据作为文本读取。

【讨论】:

  • 谢谢,那我怎么看?
  • 对于TIME 协议,请尝试DataInputStream.readInt()NTP 协议要复杂得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2023-04-08
相关资源
最近更新 更多