Telnet協議是TCP/IP協議族中的一員,是Internet遠程登陸服務的標准協議和主要方式。它為用戶提供了在本地計算機上完成遠程主機工作的能力。
遠程登錄是指用戶使用Telnet命令,使自己的計算機暫時成為遠程主機的一個仿真終端的過程。仿真終端等效於一個非智能的機器,它只負責把用戶輸入的每個字符傳遞給主機,再將主機輸出的每個信息回顯在屏幕上。
TelnetClient是commons-net-3.3.jar下的一個類,用於實現telnet連接。
下面是用Java代碼實現Telnet到windows Telnet Server,
如何打開windows Telnet Server和設置賬號詳見:http://www.cnblogs.com/visoncheng/p/3665214.html
Java 實現telnet連接代碼實現(連接windows Telnet Server):
package com.core; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.net.SocketException; import org.apache.commons.net.telnet.TelnetClient; public class Main { public static void main(String[] args) { try { TelnetClient telnetClient = new TelnetClient("vt200"); //指明Telnet終端類型,否則會返回來的數據中文會亂碼 telnetClient.setDefaultTimeout(5000); //socket延遲時間:5000ms telnetClient.connect("127.0.0.1",23); //建立一個連接,默認端口是23 InputStream inputStream = telnetClient.getInputStream(); //讀取命令的流 PrintStream pStream = new PrintStream(telnetClient.getOutputStream()); //寫命令的流 byte[] b = new byte[1024]; int size; StringBuffer sBuffer = new StringBuffer(300); while(true) { //讀取Server返回來的數據,直到讀到登陸標識,這個時候認為可以輸入用戶名 size = inputStream.read(b); if(-1 != size) { sBuffer.append(new String(b,0,size)); if(sBuffer.toString().trim().endsWith("login:")) { break; } } } System.out.println(sBuffer.toString()); pStream.println("exit"); //寫命令 pStream.flush(); //將命令發送到telnet Server if(null != pStream) { pStream.close(); } telnetClient.disconnect(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
TelnetClient實際是通過socket實現的。
通過InputStream讀取服務器返回的數據,自己根據數據判斷什么時候可以命令。
通過OutputStream向服務器發送命令,由於每次寫完命令后,需要寫入一個換行符,所以使用printStream會省事點(println方法寫入命令后自動加入換行符)。
在不清楚命令返回結果時,可以使用windows telnet連接到設備,輸入命令,觀察結果,程序根據結果去修改就ok。
TelnetClient實際上是模仿一個Telnet客戶端,命令輸入和獲取和客戶端輸入命令返回結果是一樣的。
