首页 > 解决方案 > TimeTCPClient 和 TimeUDPClient 都超时

问题描述

我需要来自 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.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143) 在 java.net.DatagramSocket.receive(DatagramSocket.java:812) 的 java.net.PlainDatagramSocketImpl.receive0(Native Method) 接收超时) 在 org.apache.commons.net.time.TimeUDPClient.getTime(TimeUDPClient.java:98) 在 de.modusoft.opt 的 org.apache.commons.net.time.TimeUDPClient.getTime(TimeUDPClient.java:84)。查看器.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.AbstractPlainSocketImpl.java:350 的 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 的 java.net.PlainSocketImpl.socketConnect(Native Method) 连接超时。 ) 在 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)

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

谢谢你的帮助。

标签: javatcpudpntpapache-commons-net

解决方案


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


推荐阅读