Java/Network Protocol/Telnet

Материал из Java эксперт
Перейти к: навигация, поиск

Example of use of Telnet Client

   <source lang="java">

/*

* Copyright 2003-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package examples; import java.io.InputStream; import java.io.OutputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.rumons.net.telnet.TelnetClient; import org.apache.rumons.net.telnet.TelnetNotificationHandler; import org.apache.rumons.net.telnet.SimpleOptionHandler; import org.apache.rumons.net.telnet.EchoOptionHandler; import org.apache.rumons.net.telnet.TerminalTypeOptionHandler; import org.apache.rumons.net.telnet.SuppressGAOptionHandler; import org.apache.rumons.net.telnet.InvalidTelnetOptionException; import java.util.StringTokenizer;

/***

* This is a simple example of use of TelnetClient.
* An external option handler (SimpleTelnetOptionHandler) is used.
* Initial configuration requested by TelnetClient will be:
* WILL ECHO, WILL SUPPRESS-GA, DO SUPPRESS-GA.
* VT100 terminal type will be subnegotiated.
*

* Also, use of the sendAYT(), getLocalOptionState(), getRemoteOptionState() * is demonstrated. * When connected, type AYT to send an AYT command to the server and see * the result. * Type OPT to see a report of the state of the first 25 options. * <p> * @author Bruno D"Avanzo ***/ public class TelnetClientExample implements Runnable, TelnetNotificationHandler { static TelnetClient tc = null; /*** * Main for the TelnetClientExample. ***/ public static void main(String[] args) throws IOException { FileOutputStream fout = null; if(args.length < 1) { System.err.println("Usage: TelnetClientExample1 <remote-ip> [<remote-port>]"); System.exit(1); } String remoteip = args[0]; int remoteport; if (args.length > 1) { remoteport = (new Integer(args[1])).intValue(); } else { remoteport = 23; } try { fout = new FileOutputStream ("spy.log", true); } catch (Exception e) { System.err.println( "Exception while opening the spy file: " + e.getMessage()); } tc = new TelnetClient(); TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler("VT100", false, false, true, false); EchoOptionHandler echoopt = new EchoOptionHandler(true, false, true, false); SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true, true, true, true); try { tc.addOptionHandler(ttopt); tc.addOptionHandler(echoopt); tc.addOptionHandler(gaopt); } catch (InvalidTelnetOptionException e) { System.err.println("Error registering option handlers: " + e.getMessage()); } while (true) { boolean end_loop = false; try { tc.connect(remoteip, remoteport); Thread reader = new Thread (new TelnetClientExample()); tc.registerNotifHandler(new TelnetClientExample()); System.out.println("TelnetClientExample"); System.out.println("Type AYT to send an AYT telnet command"); System.out.println("Type OPT to print a report of status of options (0-24)"); System.out.println("Type REGISTER to register a new SimpleOptionHandler"); System.out.println("Type UNREGISTER to unregister an OptionHandler"); System.out.println("Type SPY to register the spy (connect to port 3333 to spy)"); System.out.println("Type UNSPY to stop spying the connection"); reader.start(); OutputStream outstr = tc.getOutputStream(); byte[] buff = new byte[1024]; int ret_read = 0; do { try { ret_read = System.in.read(buff); if(ret_read > 0) { if((new String(buff, 0, ret_read)).startsWith("AYT")) { try { System.out.println("Sending AYT"); System.out.println("AYT response:" + tc.sendAYT(5000)); } catch (Exception e) { System.err.println("Exception waiting AYT response: " + e.getMessage()); } } else if((new String(buff, 0, ret_read)).startsWith("OPT")) { System.out.println("Status of options:"); for(int ii=0; ii<25; ii++) System.out.println("Local Option " + ii + ":" + tc.getLocalOptionState(ii) + " Remote Option " + ii + ":" + tc.getRemoteOptionState(ii)); } else if((new String(buff, 0, ret_read)).startsWith("REGISTER")) { StringTokenizer st = new StringTokenizer(new String(buff)); try { st.nextToken(); int opcode = (new Integer(st.nextToken())).intValue(); boolean initlocal = (new Boolean(st.nextToken())).booleanValue(); boolean initremote = (new Boolean(st.nextToken())).booleanValue(); boolean acceptlocal = (new Boolean(st.nextToken())).booleanValue(); boolean acceptremote = (new Boolean(st.nextToken())).booleanValue(); SimpleOptionHandler opthand = new SimpleOptionHandler(opcode, initlocal, initremote, acceptlocal, acceptremote); tc.addOptionHandler(opthand); } catch (Exception e) { if(e instanceof InvalidTelnetOptionException) { System.err.println("Error registering option: " + e.getMessage()); } else { System.err.println("Invalid REGISTER command."); System.err.println("Use REGISTER optcode initlocal initremote acceptlocal acceptremote"); System.err.println("(optcode is an integer.)"); System.err.println("(initlocal, initremote, acceptlocal, acceptremote are boolean)"); } } } else if((new String(buff, 0, ret_read)).startsWith("UNREGISTER")) { StringTokenizer st = new StringTokenizer(new String(buff)); try { st.nextToken(); int opcode = (new Integer(st.nextToken())).intValue(); tc.deleteOptionHandler(opcode); } catch (Exception e) { if(e instanceof InvalidTelnetOptionException) { System.err.println("Error unregistering option: " + e.getMessage()); } else { System.err.println("Invalid UNREGISTER command."); System.err.println("Use UNREGISTER optcode"); System.err.println("(optcode is an integer)"); } } } else if((new String(buff, 0, ret_read)).startsWith("SPY")) { try { tc.registerSpyStream(fout); } catch (Exception e) { System.err.println("Error registering the spy"); } } else if((new String(buff, 0, ret_read)).startsWith("UNSPY")) { tc.stopSpyStream(); } else { try { outstr.write(buff, 0 , ret_read); outstr.flush(); } catch (Exception e) { end_loop = true; } } } } catch (Exception e) { System.err.println("Exception while reading keyboard:" + e.getMessage()); end_loop = true; } } while((ret_read > 0) && (end_loop == false)); try { tc.disconnect(); } catch (Exception e) { System.err.println("Exception while connecting:" + e.getMessage()); } } catch (Exception e) { System.err.println("Exception while connecting:" + e.getMessage()); System.exit(1); } } } /*** * Callback method called when TelnetClient receives an option * negotiation command. * <p> * @param negotiation_code - type of negotiation command received * (RECEIVED_DO, RECEIVED_DONT, RECEIVED_WILL, RECEIVED_WONT) * <p> * @param option_code - code of the option negotiated * <p> ***/ public void receivedNegotiation(int negotiation_code, int option_code) { String command = null; if(negotiation_code == TelnetNotificationHandler.RECEIVED_DO) { command = "DO"; } else if(negotiation_code == TelnetNotificationHandler.RECEIVED_DONT) { command = "DONT"; } else if(negotiation_code == TelnetNotificationHandler.RECEIVED_WILL) { command = "WILL"; } else if(negotiation_code == TelnetNotificationHandler.RECEIVED_WONT) { command = "WONT"; } System.out.println("Received " + command + " for option code " + option_code); } /*** * Reader thread. * Reads lines from the TelnetClient and echoes them * on the screen. ***/ public void run() { InputStream instr = tc.getInputStream(); try { byte[] buff = new byte[1024]; int ret_read = 0; do { ret_read = instr.read(buff); if(ret_read > 0) { System.out.print(new String(buff, 0, ret_read)); } } while (ret_read >= 0); } catch (Exception e) { System.err.println("Exception while reading socket:" + e.getMessage()); } try { tc.disconnect(); } catch (Exception e) { System.err.println("Exception while closing telnet:" + e.getMessage()); } } } </source>

TelnetClient: connects to the weather server at the University of Michigan

   <source lang="java">

/*

* Copyright 2001-2005 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package examples; import java.io.IOException; import org.apache.rumons.net.telnet.TelnetClient; /***

* This is an example of a trivial use of the TelnetClient class.
* It connects to the weather server at the University of Michigan,
* um-weather.sprl.umich.edu port 3000, and allows the user to interact
* with the server via standard input.  You could use this example to
* connect to any telnet server, but it is obviously not general purpose
* because it reads from standard input a line at a time, making it
* inconvenient for use with a remote interactive shell.  The TelnetClient
* class used by itself is mostly intended for automating access to telnet
* resources rather than interactive use.
* <p>
***/

// This class requires the IOUtil support class! public class weatherTelnet {

   public final static void main(String[] args)
   {
       TelnetClient telnet;
       telnet = new TelnetClient();
       try
       {
           telnet.connect("rainmaker.wunderground.ru", 3000);
       }
       catch (IOException e)
       {
           e.printStackTrace();
           System.exit(1);
       }
       IOUtil.readWrite(telnet.getInputStream(), telnet.getOutputStream(),
                        System.in, System.out);
       try
       {
           telnet.disconnect();
       }
       catch (IOException e)
       {
           e.printStackTrace();
           System.exit(1);
       }
       System.exit(0);
   }

}


      </source>