All Downloads are FREE. Search and download functionalities are using the official Maven repository.

panda.net.daytime.DaytimeUDPClient Maven / Gradle / Ivy

There is a newer version: 1.8.0
Show newest version
package panda.net.daytime;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;

import panda.net.DatagramSocketClient;

/**
 * The DaytimeUDPClient class is a UDP implementation of a client for the Daytime protocol described
 * in RFC 867. To use the class, merely open a local datagram socket with
 * {@link panda.net.DatagramSocketClient#open open } and call {@link #getTime getTime } to retrieve
 * the daytime string, then call {@link panda.net.DatagramSocketClient#close close } to close the
 * connection properly. Unlike {@link panda.net.daytime.DaytimeTCPClient}, successive calls to
 * {@link #getTime getTime } are permitted without re-establishing a connection. That is because UDP
 * is a connectionless protocol and the Daytime protocol is stateless.
 * 
 * @see DaytimeTCPClient
 */
public final class DaytimeUDPClient extends DatagramSocketClient {
	/** The default daytime port. It is set to 13 according to RFC 867. */
	public static final int DEFAULT_PORT = 13;

	private final byte[] __dummyData = new byte[1];
	// Received dates should be less than 256 bytes
	private final byte[] __timeData = new byte[256];

	/**
	 * Retrieves the time string from the specified server and port and returns it.
	 * 
	 * @param host The address of the server.
	 * @param port The port of the service.
	 * @return The time string.
	 * @exception IOException If an error occurs while retrieving the time.
	 */
	public String getTime(InetAddress host, int port) throws IOException {
		DatagramPacket sendPacket, receivePacket;

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

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

		return new String(receivePacket.getData(), 0, receivePacket.getLength(), getCharsetName()); // Java
																									// 1.6
																									// can
																									// use
																									// getCharset()
	}

	/**
	 * Same as getTime(host, DaytimeUDPClient.DEFAULT_PORT);
	 * 
	 * @param host the host
	 * @return the time
	 * @throws IOException on error
	 */
	public String getTime(InetAddress host) throws IOException {
		return getTime(host, DEFAULT_PORT);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy