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

DatagramSocketClient

public abstract class DatagramSocketClient extends Object
The DatagramSocketClient provides the basic operations that are required of client objects accessing datagram sockets. It is meant to be subclassed to avoid having to rewrite the same code over and over again to open a socket, close a socket, set timeouts, etc. Of special note is the {@link #setDatagramSocketFactory setDatagramSocketFactory } method, which allows you to control the type of DatagramSocket the DatagramSocketClient creates for network communications. This is especially useful for adding things like proxy support as well as better support for applets. For example, you could create a {@link org.apache.commons.net.DatagramSocketFactory} that requests browser security capabilities before creating a socket. All classes derived from DatagramSocketClient should use the {@link #_socketFactory_ _socketFactory_ } member variable to create DatagramSocket instances rather than instantiating them by directly invoking a constructor. By honoring this contract you guarantee that a user will always be able to provide his own Socket implementations by substituting his own SocketFactory.

author
Daniel F. Savarese
see
DatagramSocketFactory

Fields Summary
private static final DatagramSocketFactory
__DEFAULT_SOCKET_FACTORY
The default DatagramSocketFactory shared by all DatagramSocketClient instances.
protected int
_timeout_
The timeout to use after opening a socket.
protected DatagramSocket
_socket_
The datagram socket used for the connection.
protected boolean
_isOpen_
A status variable indicating if the client's socket is currently open.
protected DatagramSocketFactory
_socketFactory_
The datagram socket's DatagramSocketFactory.
Constructors Summary
public DatagramSocketClient()
Default constructor for DatagramSocketClient. Initializes _socket_ to null, _timeout_ to 0, and _isOpen_ to false.


                         
     
    
        _socket_ = null;
        _timeout_ = 0;
        _isOpen_ = false;
        _socketFactory_ = __DEFAULT_SOCKET_FACTORY;
    
Methods Summary
public voidclose()
Closes the DatagramSocket used for the connection. You should call this method after you've finished using the class instance and also before you call {@link #open open() } again. _isOpen_ is set to false and _socket_ is set to null. If you call this method when the client socket is not open, a NullPointerException is thrown.

        _socket_.close();
        _socket_ = null;
        _isOpen_ = false;
    
public intgetDefaultTimeout()
Returns the default timeout in milliseconds that is used when opening a socket.

return
The default timeout in milliseconds that is used when opening a socket.

        return _timeout_;
    
public java.net.InetAddressgetLocalAddress()
Returns the local address to which the client's socket is bound. If you call this method when the client socket is not open, a NullPointerException is thrown.

return
The local address to which the client's socket is bound.

        return _socket_.getLocalAddress();
    
public intgetLocalPort()
Returns the port number of the open socket on the local host used for the connection. If you call this method when the client socket is not open, a NullPointerException is thrown.

return
The port number of the open socket on the local host used for the connection.

        return _socket_.getLocalPort();
    
public intgetSoTimeout()
Returns the timeout in milliseconds of the currently opened socket. If you call this method when the client socket is not open, a NullPointerException is thrown.

return
The timeout in milliseconds of the currently opened socket.

        return _socket_.getSoTimeout();
    
public booleanisOpen()
Returns true if the client has a currently open socket.

return
True if the client has a curerntly open socket, false otherwise.

        return _isOpen_;
    
public voidopen()
Opens a DatagramSocket on the local host at the first available port. Also sets the timeout on the socket to the default timeout set by {@link #setDefaultTimeout setDefaultTimeout() }.

_isOpen_ is set to true after calling this method and _socket_ is set to the newly opened socket.

exception
SocketException If the socket could not be opened or the timeout could not be set.

        _socket_ = _socketFactory_.createDatagramSocket();
        _socket_.setSoTimeout(_timeout_);
        _isOpen_ = true;
    
public voidopen(int port)
Opens a DatagramSocket on the local host at a specified port. Also sets the timeout on the socket to the default timeout set by {@link #setDefaultTimeout setDefaultTimeout() }.

_isOpen_ is set to true after calling this method and _socket_ is set to the newly opened socket.

param
port The port to use for the socket.
exception
SocketException If the socket could not be opened or the timeout could not be set.

        _socket_ = _socketFactory_.createDatagramSocket(port);
        _socket_.setSoTimeout(_timeout_);
        _isOpen_ = true;
    
public voidopen(int port, java.net.InetAddress laddr)
Opens a DatagramSocket at the specified address on the local host at a specified port. Also sets the timeout on the socket to the default timeout set by {@link #setDefaultTimeout setDefaultTimeout() }.

_isOpen_ is set to true after calling this method and _socket_ is set to the newly opened socket.

param
port The port to use for the socket.
param
laddr The local address to use.
exception
SocketException If the socket could not be opened or the timeout could not be set.

        _socket_ = _socketFactory_.createDatagramSocket(port, laddr);
        _socket_.setSoTimeout(_timeout_);
        _isOpen_ = true;
    
public voidsetDatagramSocketFactory(DatagramSocketFactory factory)
Sets the DatagramSocketFactory used by the DatagramSocketClient to open DatagramSockets. If the factory value is null, then a default factory is used (only do this to reset the factory after having previously altered it).

param
factory The new DatagramSocketFactory the DatagramSocketClient should use.

        if (factory == null)
            _socketFactory_ = __DEFAULT_SOCKET_FACTORY;
        else
            _socketFactory_ = factory;
    
public voidsetDefaultTimeout(int timeout)
Set the default timeout in milliseconds to use when opening a socket. After a call to open, the timeout for the socket is set using this value. This method should be used prior to a call to {@link #open open()} and should not be confused with {@link #setSoTimeout setSoTimeout()} which operates on the currently open socket. _timeout_ contains the new timeout value.

param
timeout The timeout in milliseconds to use for the datagram socket connection.

        _timeout_ = timeout;
    
public voidsetSoTimeout(int timeout)
Set the timeout in milliseconds of a currently open connection. Only call this method after a connection has been opened by {@link #open open()}.

param
timeout The timeout in milliseconds to use for the currently open datagram socket connection.

        _socket_.setSoTimeout(timeout);