相关文章推荐
爱旅游的红茶  ·  python ...·  5 月前    · 
文质彬彬的拐杖  ·  Elasticsearch 1 ...·  5 月前    · 
自信的小狗  ·  RStudio 改名 ...·  1 年前    · 
一身肌肉的眼镜  ·  ios errorCode=-1003 ...·  1 年前    · 

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