使用commons-net 做的一个简易的telnet客户端,简易的putty

 

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();
}
}
}


但这个程序存在一个很严重的问题,就是从服务短读取的数据显示的时候会有问题,会有不知道是什么乱七八糟的字符显示,但有不是乱码,如下:
  lib        readme.html  server

请知道得大虾们赐教,多谢了。

你可能感兴趣的:(apache,jdk,.net,socket,OS)