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客户端,命令输入和获取和客户端输入命令返回结果是一样的。