org.apache.commons.net.chargen

## Class CharGenUDPClient

- java.lang.Object
- - org.apache.commons.net.DatagramSocketClient
  - - org.apache.commons.net.chargen.CharGenUDPClient

- All Implemented Interfaces:
    AutoCloseable

      public final class CharGenUDPClient
      extends DatagramSocketClient

  The CharGenUDPClient class is a UDP implementation of a client for the character generator protocol described in RFC 864. It can also be used for Systat (RFC 866), Quote of the Day (RFC 865), and netstat (port 15). All of these protocols involve sending a datagram to the appropriate port, and reading data contained in one or more reply datagrams. The chargen and quote of the day protocols only send one reply datagram containing 512 bytes or fewer. The other protocols may reply with more than one datagram, in which case you must wait for a timeout to determine that all reply datagrams have been sent.

  To use the CharGenUDPClient class, just open a local UDP port with `open` and call `send` to send the datagram that will initiate the data reply. For chargen or quote of the day, just call `receive`, and you're done. For netstat and systat, call receive in a while loop, and catch a SocketException and InterruptedIOException to detect a timeout (don't forget to set the timeout duration beforehand). Don't forget to call `close()` to clean up properly.

  See Also:
    `CharGenTCPClient`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `CHARGEN_PORT` The character generator port value of 19 according to RFC 864.
    `static int` | `DEFAULT_PORT` The default chargen port.
    `static int` | `NETSTAT_PORT` The netstat port value of 19.
    `static int` | `QUOTE_OF_DAY_PORT` The quote of the day port value of 17 according to RFC 865.
    `static int` | `SYSTAT_PORT` The systat port value of 11 according to RFC 866.

    - ### Fields inherited from class org.apache.commons.net.DatagramSocketClient

      `_isOpen_, _socket_, _socketFactory_, _timeout_`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `CharGenUDPClient()` The default CharGenUDPClient constructor.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `byte[]` | `receive()` Receive the reply data from the server.
    `void` | `send(InetAddress host)` Same as `send(host, CharGenUDPClient.DEFAULT_PORT);`
    `void` | `send(InetAddress host, int port)` Sends the data initiation datagram.

    - ### Methods inherited from class org.apache.commons.net.DatagramSocketClient

      `checkOpen, close, getCharset, getDefaultTimeout, getLocalAddress, getLocalPort, getSoTimeoutDuration, isOpen, open, open, open, setCharset, setDatagramSocketFactory, setDefaultTimeout, setSoTimeout`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### CHARGEN_PORT

          public static final int CHARGEN_PORT

      The character generator port value of 19 according to RFC 864.
      See Also:
        Constant Field Values

    - #### DEFAULT_PORT

          public static final int DEFAULT_PORT

      The default chargen port. It is set to 19 according to RFC 864.
      See Also:
        Constant Field Values

    - #### NETSTAT_PORT

          public static final int NETSTAT_PORT

      The netstat port value of 19.
      See Also:
        Constant Field Values

    - #### QUOTE_OF_DAY_PORT

          public static final int QUOTE_OF_DAY_PORT

      The quote of the day port value of 17 according to RFC 865.
      See Also:
        Constant Field Values

    - #### SYSTAT_PORT

          public static final int SYSTAT_PORT

      The systat port value of 11 according to RFC 866.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### CharGenUDPClient

          public CharGenUDPClient()

      The default CharGenUDPClient constructor. It initializes some internal data structures for sending and receiving the necessary datagrams for the chargen and related protocols.

  - ### Method Detail

    - #### receive

          public byte[] receive()
                         throws IOException

      Receive the reply data from the server. This will always be 512 bytes or fewer. Chargen and quote of the day only return one packet. Netstat and systat require multiple calls to receive() with timeout detection.
      Returns:
        The reply data from the server.
      Throws:
        `IOException` - If an error occurs while receiving the datagram.

    - #### send

          public void send(InetAddress host)
                    throws IOException

      Same as `send(host, CharGenUDPClient.DEFAULT_PORT);`
      Parameters:
        `host` - the destination host
      Throws:
        `IOException` - on error

    - #### send

          public void send(InetAddress host,
                           int port)
                    throws IOException

      Sends the data initiation datagram. This data in the packet is ignored by the server, and merely serves to signal that the server should send its reply.
      Parameters:
        `host` - The address of the server.
        `port` - The port of the service.
      Throws:
        `IOException` - If an error occurs while sending the datagram.