java實現Telnet連接


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客戶端,命令輸入和獲取和客戶端輸入命令返回結果是一樣的。

 

測試代碼:http://pan.baidu.com/s/1jFft0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM