Class TelnetClient


  • public class TelnetClient
    extends Telnet
    The TelnetClient class implements the simple network virtual terminal (NVT) for the Telnet protocol according to RFC 854. It does not implement any of the extra Telnet options because it is meant to be used within a Java program providing automated access to Telnet accessible resources.

    The class can be used by first connecting to a server using the SocketClient connect method. Then an InputStream and OutputStream for sending and receiving data over the Telnet connection can be obtained by using the getInputStream() and getOutputStream() methods. When you finish using the streams, you must call disconnect rather than simply closing the streams.

    • Field Detail

      • DEFAULT_MAX_SUBNEGOTIATION_LENGTH

        private static final int DEFAULT_MAX_SUBNEGOTIATION_LENGTH
        See Also:
        Constant Field Values
      • maxSubnegotiationLength

        final int maxSubnegotiationLength
      • input

        private java.io.InputStream input
      • output

        private java.io.OutputStream output
      • readerThread

        protected boolean readerThread
    • Constructor Detail

      • TelnetClient

        public TelnetClient()
        Default TelnetClient constructor, sets terminal-type VT100.
      • TelnetClient

        public TelnetClient​(int maxSubnegotiationLength)
        Constructs an instance with the specified max subnegotiation length and the default terminal-type VT100
        Parameters:
        maxSubnegotiationLength - the size of the subnegotiation buffer
      • TelnetClient

        public TelnetClient​(java.lang.String termtype)
        Constructs an instance with the specified terminal type.
        Parameters:
        termtype - the terminal type to use, e.g. VT100
      • TelnetClient

        public TelnetClient​(java.lang.String termtype,
                            int maxSubnegotiationLength)
        Constructs an instance with the specified terminal type and max subnegotiation length
        Parameters:
        termtype - the terminal type to use, e.g. VT100
        maxSubnegotiationLength - the size of the subnegotiation buffer
    • Method Detail

      • _connectAction_

        protected void _connectAction_()
                                throws java.io.IOException
        Handles special connection requirements.
        Overrides:
        _connectAction_ in class Telnet
        Throws:
        java.io.IOException - If an error occurs during connection setup.
      • closeOutputStream

        void closeOutputStream()
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • disconnect

        public void disconnect()
                        throws java.io.IOException
        Disconnects the telnet session, closing the input and output streams as well as the socket. If you have references to the input and output streams of the telnet connection, you should not close them yourself, but rather call disconnect to properly close the connection.
        Overrides:
        disconnect in class SocketClient
        Throws:
        java.io.IOException - If there is an error closing the socket.
      • flushOutputStream

        void flushOutputStream()
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • getInputStream

        public java.io.InputStream getInputStream()
        Returns the telnet connection input stream. You should not close the stream when you finish with it. Rather, you should call disconnect .
        Returns:
        The telnet connection input stream.
      • getLocalOptionState

        public boolean getLocalOptionState​(int option)
        Returns the state of the option on the local side.
        Parameters:
        option - - Option to be checked.
        Returns:
        The state of the option on the local side.
      • getOutputStream

        public java.io.OutputStream getOutputStream()
        Returns the telnet connection output stream. You should not close the stream when you finish with it. Rather, you should call disconnect .
        Returns:
        The telnet connection output stream.
      • getReaderThread

        public boolean getReaderThread()
        Gets the status of the reader thread.
        Returns:
        true if the reader thread is enabled, false otherwise
      • getRemoteOptionState

        public boolean getRemoteOptionState​(int option)
        Returns the state of the option on the remote side.
        Parameters:
        option - - Option to be checked.
        Returns:
        The state of the option on the remote side.
      • notifyInputListener

        void notifyInputListener()
      • registerInputListener

        public void registerInputListener​(TelnetInputListener listener)
        Register a listener to be notified when new incoming data is available to be read on the input stream. Only one listener is supported at a time.

        More precisely, notifications are issued whenever the number of bytes available for immediate reading (i.e., the value returned by InputStream.available()) transitions from zero to non-zero. Note that (in general) multiple reads may be required to empty the buffer and reset this notification, because incoming bytes are being added to the internal buffer asynchronously.

        Notifications are only supported when a reader thread is enabled for the connection.

        Parameters:
        listener - listener to be registered; replaces any previous
        Since:
        3.0
      • registerNotifHandler

        public void registerNotifHandler​(TelnetNotificationHandler notifhand)
        Registers a notification handler to which will be sent notifications of received telnet option negotiation commands.
        Overrides:
        registerNotifHandler in class Telnet
        Parameters:
        notifhand - - TelnetNotificationHandler to be registered
      • registerSpyStream

        public void registerSpyStream​(java.io.OutputStream spystream)
        Registers an OutputStream for spying what's going on in the TelnetClient session.
        Parameters:
        spystream - - OutputStream on which session activity will be echoed.
      • sendAYT

        public boolean sendAYT​(java.time.Duration timeout)
                        throws java.io.IOException,
                               java.lang.IllegalArgumentException,
                               java.lang.InterruptedException
        Sends an Are You There (AYT) sequence and waits for the result.
        Parameters:
        timeout - - Time to wait for a response.
        Returns:
        true if AYT received a response, false otherwise.
        Throws:
        java.lang.InterruptedException - on error
        java.lang.IllegalArgumentException - on error
        java.io.IOException - on error
        Since:
        3.10.0
      • sendAYT

        @Deprecated
        public boolean sendAYT​(long timeout)
                        throws java.io.IOException,
                               java.lang.IllegalArgumentException,
                               java.lang.InterruptedException
        Deprecated.
        Sends an Are You There (AYT) sequence and waits for the result.
        Parameters:
        timeout - - Time to wait for a response (millis.)
        Returns:
        true if AYT received a response, false otherwise
        Throws:
        java.lang.InterruptedException - on error
        java.lang.IllegalArgumentException - on error
        java.io.IOException - on error
      • sendCommand

        public void sendCommand​(byte command)
                         throws java.io.IOException,
                                java.lang.IllegalArgumentException
        Sends a command byte to the remote peer, adding the IAC prefix.

        This method does not wait for any response. Messages sent by the remote end can be handled by registering an approrpriate TelnetOptionHandler.

        Parameters:
        command - the code for the command
        Throws:
        java.io.IOException - if an I/O error occurs while writing the message
        java.lang.IllegalArgumentException - on error
        Since:
        3.0
      • sendSubnegotiation

        public void sendSubnegotiation​(int[] message)
                                throws java.io.IOException,
                                       java.lang.IllegalArgumentException
        Sends a protocol-specific subnegotiation message to the remote peer. TelnetClient will add the IAC SB & IAC SE framing bytes; the first byte in message should be the appropriate telnet option code.

        This method does not wait for any response. Subnegotiation messages sent by the remote end can be handled by registering an approrpriate TelnetOptionHandler.

        Parameters:
        message - option code followed by subnegotiation payload
        Throws:
        java.lang.IllegalArgumentException - if message has length zero
        java.io.IOException - if an I/O error occurs while writing the message
        Since:
        3.0
      • setReaderThread

        public void setReaderThread​(boolean flag)
        Sets the status of the reader thread.

        When enabled, a seaparate internal reader thread is created for new connections to read incoming data as it arrives. This results in immediate handling of option negotiation, notifications, etc. (at least until the fixed-size internal buffer fills up). Otherwise, no thread is created an all negotiation and option handling is deferred until a read() is performed on the input stream.

        The reader thread must be enabled for TelnetInputListener support.

        When this method is invoked, the reader thread status will apply to all subsequent connections; the current connection (if any) is not affected.

        Parameters:
        flag - true to enable the reader thread, false to disable
        See Also:
        registerInputListener(org.apache.commons.net.telnet.TelnetInputListener)
      • stopSpyStream

        public void stopSpyStream()
        Stops spying this TelnetClient.
      • unregisterInputListener

        public void unregisterInputListener()
        Unregisters the current TelnetInputListener, if any.
        Since:
        3.0
      • unregisterNotifHandler

        public void unregisterNotifHandler()
        Unregisters the current notification handler.
        Overrides:
        unregisterNotifHandler in class Telnet