Search code examples
javatcpudpntpapache-commons-net

TimeTCPClient and TimeUDPClient both timing out


I need the time from a NTP server.

I tied this:

  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;
  }

After a 10 Sekonds I get this exception:

java.net.SocketTimeoutException: Receive timed out at java.net.PlainDatagramSocketImpl.receive0(Native Method) at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143) at java.net.DatagramSocket.receive(DatagramSocket.java:812) at org.apache.commons.net.time.TimeUDPClient.getTime(TimeUDPClient.java:84) at org.apache.commons.net.time.TimeUDPClient.getTime(TimeUDPClient.java:98) at de.modusoft.opt.viewer.TimeSyncThread.run(TimeSyncThread.java:34) at java.lang.Thread.run(Thread.java:748)

I also tried this:

    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;
    }

And got also a Timout exception.

java.net.SocketTimeoutException: connect timed out at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at org.apache.commons.net.SocketClient.connect(SocketClient.java:182) at org.apache.commons.net.SocketClient.connect(SocketClient.java:203) at org.apache.commons.net.SocketClient.connect(SocketClient.java:296) at de.modusoft.opt.viewer.TimeSyncThread.run(TimeSyncThread.java:29) at java.lang.Thread.run(Thread.java:748)

host is a String and a tried "0.de.pool.ntp.org", "ntp.xs4all.nl".

Thanks for your help.


Solution

  • If you need the time from an NTP server, you need to use the NTP protocol. The TimeUDPClient and TimeTCPClient classes use the Time Protocol, not NTP.