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 "";
}
}