TelnetTerminal

package com.network.telnet;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;

import org.apache.commons.net.telnet.TelnetClient;

public class TelnetTerminal extends Thread {
    public static final int DEFAULT_TELNET_PORT = 23;
    /**
     * the TelnetClient of commons-net
     */
    public TelnetClient telnet;
    /**
     * the output of remote
     */
    private StringBuffer remoteInfo = new StringBuffer();
    private InputStream in;
    private PrintStream out;

    /**
     * use default port
     * 
     * @param ip
     */
    public TelnetTerminal(String ip) {
        this(ip, DEFAULT_TELNET_PORT);
    }

    /**
     * create a telnet terminate
     * 
     * @param ip
     * @param port
     */
    public TelnetTerminal(String ip, int port) {
        try {
            telnet = new TelnetClient();            
            telnet.connect(ip, port);
            //to sure the thread must be stop and socket must be close
            telnet.setSoTimeout(3000);
            in = telnet.getInputStream();
            out = new PrintStream(telnet.getOutputStream());
            // open the thread of received
            start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * wirte to remote
     * 
     * @param command
     */
    public void write(String command) {
        try {
            // the interval of execute command
            Thread.sleep(500);
            // a command end with '\n\r'
            out.println(command);
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * close connect
     */
    public void disconnect() {
        try {
            telnet.disconnect();
            telnet = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        byte[] buff = new byte[1024];
        int len = 0;
        try {
            while ((len = in.read(buff)) != -1) {
                String str = new String(buff, 0, len);
                remoteInfo.append(str);
            }
        } catch (IOException e) {

        }
    }

    /**
     * exceute script
     * 
     * @param scripts
     */
    public void runCMD(String... scripts) {
        for (String cmd : scripts) {
            write(cmd.trim());
        }
    }

    /**
     * get output info of the remote, but this method will block 1000ms
     * 
     * @return
     */
    public String getRemoteInfo() {
        try {
            Thread.sleep(1000);
            return remoteInfo.toString();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "";
    }
}

 

posted on 2015-01-04 12:33  Wellla  阅读(378)  评论(0编辑  收藏  举报

导航