【问题标题】:TimeTCPClient and TimeUDPClient both timing outTimeTCPClient 和 TimeUDPClient 都超时
【发布时间】:2019-03-28 20:38:58
【问题描述】:

我需要来自 NTP 服务器的时间。

我系了这个:

  TimeUDPClient client = new TimeUDPClient();
  try {
        client.open();
        client.setSoTimeout(10000);
        client.getTime(InetAddress.getByName(host));
        client.close();
  } catch (IOException exp) {
        System.out.println("NTP connection error");
        exp.printStackTrace();
        return;
  }

10 秒后,我得到了这个异常:

java.net.SocketTimeoutException: 接收超时 在 java.net.PlainDatagramSocketImpl.receive0(本机方法) 在 java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143) 在 java.net.DatagramSocket.receive(DatagramSocket.java:812) 在 org.apache.commons.net.time.TimeUDPClient.getTime(TimeUDPClient.java:84) 在 org.apache.commons.net.time.TimeUDPClient.getTime(TimeUDPClient.java:98) 在 de.modusoft.opt.viewer.TimeSyncThread.run(TimeSyncThread.java:34) 在 java.lang.Thread.run(Thread.java:748)

我也试过这个:

    TimeTCPClient client = new TimeTCPClient();
    client.setConnectTimeout(10000);
    try {
        client.connect(host);
        Date ntpDate = client.getDate();
        client.disconnect();
        System.out.println("ntpDate = " + ntpDate);
    } catch (IOException exp) {
        System.out.println("NTP connection error");
        exp.printStackTrace();
        return;
    }

还有一个超时异常。

java.net.SocketTimeoutException: 连接超时 在 java.net.PlainSocketImpl.socketConnect(本机方法) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在 java.net.Socket.connect(Socket.java:589) 在 org.apache.commons.net.SocketClient.connect(SocketClient.java:182) 在 org.apache.commons.net.SocketClient.connect(SocketClient.java:203) 在 org.apache.commons.net.SocketClient.connect(SocketClient.java:296) 在 de.modusoft.opt.viewer.TimeSyncThread.run(TimeSyncThread.java:29) 在 java.lang.Thread.run(Thread.java:748)

host 是一个字符串和一个尝试过的“0.de.pool.ntp.org”、“ntp.xs4all.nl”。

感谢您的帮助。

【问题讨论】:

  • “普通”客户端能否从同一网络向其中任何一个服务器发出成功请求以排除其他任何问题。
  • 是的,现在我可以使用NTPUDPClient client = new NTPUDPClient(),但上面的代码仍然不起作用。
  • TimeUDPClient 和 TimeTCPClient 类连接到实现时间协议的时间服务,如 RFC 868 中所述,侦听端口 37,这与端口 123 上的 NTP 服务不同。将 NTPUDPClient 用于 NTP服务。

标签: java tcp udp ntp apache-commons-net


【解决方案1】:

如果您需要来自 NTP 服务器的时间,则需要使用 NTP 协议。 TimeUDPClientTimeTCPClient 类使用时间协议,而不是 NTP。

【讨论】:

  • 我改成了org.apache.commons.net.ntp.NTPUDPClient
猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 2011-10-28
  • 2013-01-06
  • 2015-04-30
  • 2014-06-21
  • 2021-10-12
  • 2019-06-19
  • 1970-01-01
相关资源
最近更新 更多