FileDocCategorySizeDatePackage
TimeUDPClient.javaAPI DocApache Commons NET 1.4.1 API4439Sat Dec 03 10:05:48 GMT 2005org.apache.commons.net

TimeUDPClient

public final class TimeUDPClient extends DatagramSocketClient
The TimeUDPClient class is a UDP implementation of a client for the Time protocol described in RFC 868. To use the class, merely open a local datagram socket with {@link org.apache.commons.net.DatagramSocketClient#open open } and call {@link #getTime getTime } or {@link #getTime getDate } to retrieve the time. Then call {@link org.apache.commons.net.DatagramSocketClient#close close } to close the connection properly. Unlike {@link org.apache.commons.net.TimeTCPClient}, successive calls to {@link #getTime getTime } or {@link #getDate getDate } are permitted without re-establishing a connection. That is because UDP is a connectionless protocol and the Time protocol is stateless.

author
Daniel F. Savarese
see
TimeTCPClient

Fields Summary
public static final int
DEFAULT_PORT
The default time port. It is set to 37 according to RFC 868.
public static final long
SECONDS_1900_TO_1970
The number of seconds between 00:00 1 January 1900 and 00:00 1 January 1970. This value can be useful for converting time values to other formats.
private byte[]
__dummyData
private byte[]
__timeData
Constructors Summary
Methods Summary
public java.util.DategetDate(java.net.InetAddress host, int port)
Retrieves the time from the server and returns a Java Date containing the time converted to the local timezone.

param
host The address of the server.
param
port The port of the service.
return
A Date value containing the time retrieved from the server converted to the local timezone.
exception
IOException If an error occurs while fetching the time.

        return new Date((getTime(host, port) - SECONDS_1900_TO_1970)*1000L);
    
public java.util.DategetDate(java.net.InetAddress host)
Same as getTime(host, DEFAULT_PORT);

        return new Date((getTime(host, DEFAULT_PORT) -
                         SECONDS_1900_TO_1970)*1000L);
    
public longgetTime(java.net.InetAddress host, int port)
Retrieves the time from the specified server and port and returns it. The time is the number of seconds since 00:00 (midnight) 1 January 1900 GMT, as specified by RFC 868. This method reads the raw 32-bit big-endian unsigned integer from the server, converts it to a Java long, and returns the value.

param
host The address of the server.
param
port The port of the service.
return
The time value retrieved from the server.
exception
IOException If an error occurs while retrieving the time.


                                                                                               
           
    
        long time;
        DatagramPacket sendPacket, receivePacket;

        sendPacket =
            new DatagramPacket(__dummyData, __dummyData.length, host, port);
        receivePacket = new DatagramPacket(__timeData, __timeData.length);

        _socket_.send(sendPacket);
        _socket_.receive(receivePacket);

        time = 0L;
        time |= (((__timeData[0] & 0xff) << 24) & 0xffffffffL);
        time |= (((__timeData[1] & 0xff) << 16) & 0xffffffffL);
        time |= (((__timeData[2] & 0xff) << 8) & 0xffffffffL);
        time |= ((__timeData[3] & 0xff) & 0xffffffffL);

        return time;
    
public longgetTime(java.net.InetAddress host)
Same as getTime(host, DEFAULT_PORT);

        return getTime(host, DEFAULT_PORT);