import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import org.apache.commons.net.telnet.TelnetClient;
/**
* Telnet客户端,可以登陆到Telnet服务器,灵感来源与JDK宝典
*/
public class TelnetClientCTM
{
// 默认的Telnet服务器名
public static final String DEFAULT_HOST = "127.0.0.1";
// 默认的Telnet服务器端口
public static final int DEFAULT_PORT = 23;
// 主机名(或者IP)和端口号
private String host;
private int port;
// 连接主机的socket
org.apache.commons.net.telnet.TelnetClient socket = null;
// 发送数据和接收数据的管道,Pipe为自定义类
PipeIn sendPipe = null;
PipeIn receivePipe = null;
// 默认构造方法
public TelnetClientCTM()
{
this.host = DEFAULT_HOST;
this.port = DEFAULT_PORT;
}
public TelnetClientCTM(String host, int port)
{
this.host = host;
this.port = port;
}
/**
* 登陆到服务器
*/
public void telnet()
{
try
{
socket = new TelnetClient();
socket.connect(host, port);
// 将socket的输入端数据(来自服务器端)流向本地标准输出,即接收数据
receivePipe = new PipeIn(socket.getInputStream(), System.out);
receivePipe.start();
// 将本地的标准输入数据流向socket的输出端,即流向服务器端,发送数据
sendPipe = new PipeIn(System.in, socket.getOutputStream());
sendPipe.start();
}
catch (IOException e)
{
System.out.println("连接失败:" + e);
return;
}
}
/**
* 断开连接
*/
public void disconnect()
{
if (socket != null)
{
try
{
socket.disconnect();
System.out.println("成功断开连接");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] argv)
{
new TelnetClientCTM().telnet();
}
}
/**
* 管道类,将输入流的数据写入到输出流中。 是一个线程,可以独立运行
*/
class PipeIn extends Thread
{
// 管道的输入流和输出流
InputStream is;
PrintStream os;
/**
* 构造方法,构造输入输出流
*
* @param is
* @param os
*/
PipeIn(InputStream is, OutputStream os)
{
this.is = is;
// this.is = new BufferedReader(new InputStreamReader(is));
this.os = new PrintStream(os);
}
/**
* 线程体方法,将输入流的数据写入到输出流 可以在这里做对输入的命令做处理,
* 譬如输入的“exit“指令,并且给指令的输出结果是”logout“
* 的话可以退出客户端,调用disconnect()方法和System.exit方法
*/
public void run()
{
int line = 0;
try
{
while ((line = is.read()) != -1)
{
os.print((char) line);
os.flush();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
但这个程序存在一个很严重的问题,就是从服务短读取的数据显示的时候会有问题,会有不知道是什么乱七八糟的字符显示,但有不是乱码,如下:
[01;34mlib[00m [00;32mreadme.html[00m [01;34mserver[00m
请知道得大虾们赐教,多谢了。