實現Telnet客戶端的關鍵技術如下:
訪問系統的Telnet服務實質上是與Telnet服務建立Socket連接,默認的Telnet服務的端口是23
Telnet客戶端將標準輸入流中的命令發送給Telnet服務,將響應消息顯示在標準輸出流中。因此,Telnet客戶端相當于一個代理服務,起中轉作用,將標準輸入流、Telnet服務和標準輸出流連接起來。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;

/**
* Telnet客戶端,可以登陸到Telnet服務器。
*/
public class TelnetClient {

// 默認的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
Socket socket = null;
// 發送數據和接收數據的管道,Pipe為自定義類
Pipe sendPipe = null;
Pipe receivePipe = null;
// 默認構造方法
public TelnetClient(){
this.host = DEFAULT_HOST;
this.port = DEFAULT_PORT;
}
public TelnetClient(String host, int port){
this.host = host;
this.port = port;
}

/**
* 登陸到服務器
*/
public void telnet() {
System.out.println("Connecting to telnet server " + host + ": " + port);
try {
socket = new Socket(host, port);

// 將socket的輸入端數據(來自服務器端)流向本地標準輸出,即接收數據
receivePipe = new Pipe(socket.getInputStream(), System.out);
receivePipe.start();
// 將本地的標準輸入數據流向socket的輸出端,即流向服務器端,發送數據
sendPipe = new Pipe(System.in, socket.getOutputStream());
sendPipe.start();
} catch(IOException e) {
System.out.println("連接失敗:" + e);
return;
}
System.out.println("連接成功");
}
/**
* 斷開連接
*/
public void disconnect() {
if (socket != null){
try {
socket.close();
System.out.println("成功斷開連接");
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] argv) {
new TelnetClient().telnet();
}
}

/**
* 管道類,將輸入流的數據寫入到輸出流中。
* 是一個線程,可以獨立運行
*/
class Pipe extends Thread {

// 管道的輸入流和輸出流
BufferedReader is;
PrintStream os;

/**
* 構造方法,構造輸入輸出流
* @param is
* @param os
*/
Pipe(InputStream is, OutputStream os) {
this.is = new BufferedReader(new InputStreamReader(is));
this.os = new PrintStream(os);
}
/**
* 線程體方法,將輸入流的數據寫入到輸出流
*/
public void run() {

String line;
try {
// 讀取輸入流的數據
while ((line = is.readLine()) != null) {
// 寫到輸出流中
os.print(line);
os.print("\r\n");
os.flush();
}
} catch(IOException e){
}
}
}























































































































-- 學海無涯