`
hehuabing
  • 浏览: 6249 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用commons-net 做的一个简易的telnet客户端,简易的putty

阅读更多


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;

import org.apache.commons.net.telnet.TelnetClient;

/**
* Telnet客户端,可以登陆到Telnet服务器,灵感来源与JDK宝典
*/
public class TelnetClientCTM
{

// 默认的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
org.apache.commons.net.telnet.TelnetClient socket = null;

// 发送数据和接收数据的管道,Pipe为自定义类
PipeIn sendPipe = null;

PipeIn receivePipe = null;

// 默认构造方法
public TelnetClientCTM()
{
this.host = DEFAULT_HOST;
this.port = DEFAULT_PORT;
}

public TelnetClientCTM(String host, int port)
{
this.host = host;
this.port = port;
}

/**
* 登陆到服务器
*/
public void telnet()
{
try
{
socket = new TelnetClient();

socket.connect(host, port);

// 将socket的输入端数据(来自服务器端)流向本地标准输出,即接收数据
receivePipe = new PipeIn(socket.getInputStream(), System.out);
receivePipe.start();

// 将本地的标准输入数据流向socket的输出端,即流向服务器端,发送数据
sendPipe = new PipeIn(System.in, socket.getOutputStream());
sendPipe.start();
}
catch (IOException e)
{
System.out.println("连接失败:" + e);
return;
}
}

/**
* 断开连接
*/
public void disconnect()
{
if (socket != null)
{
try
{
socket.disconnect();
System.out.println("成功断开连接");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}

public static void main(String[] argv)
{
new TelnetClientCTM().telnet();
}
}

/**
* 管道类,将输入流的数据写入到输出流中。 是一个线程,可以独立运行
*/
class PipeIn extends Thread
{

// 管道的输入流和输出流
InputStream is;

PrintStream os;

/**
* 构造方法,构造输入输出流
*
* @param is
* @param os
*/
PipeIn(InputStream is, OutputStream os)
{
this.is = is;
// this.is = new BufferedReader(new InputStreamReader(is));
this.os = new PrintStream(os);
}

/**
* 线程体方法,将输入流的数据写入到输出流 可以在这里做对输入的命令做处理,
* 譬如输入的“exit“指令,并且给指令的输出结果是”logout“
* 的话可以退出客户端,调用disconnect()方法和System.exit方法
*/
public void run()
{
int line = 0;
try
{
while ((line = is.read()) != -1)
{
os.print((char) line);
os.flush();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}


但这个程序存在一个很严重的问题,就是从服务短读取的数据显示的时候会有问题,会有不知道是什么乱七八糟的字符显示,但有不是乱码,如下:
  lib        readme.html  server

请知道得大虾们赐教,多谢了。

分享到:
评论

相关推荐

    commons-net-3.8.0-API文档-中文版.zip

    赠送jar包:commons-net-3.8.0.jar; 赠送原API文档:commons-net-3.8.0-javadoc.jar; 赠送源代码:commons-net-3.8.0-sources.jar; 赠送Maven依赖信息文件:commons-net-3.8.0.pom; 包含翻译后的API文档:...

    commons-net-3.1-API文档-中文版.zip

    赠送jar包:commons-net-3.1.jar; 赠送原API文档:commons-net-3.1-javadoc.jar; 赠送源代码:commons-net-3.1-sources.jar; 包含翻译后的API文档:commons-net-3.1-javadoc-API文档-中文(简体)版.zip 对应...

    commons-net-3.6-API文档-中英对照版.zip

    赠送jar包:commons-net-3.6.jar; 赠送原API文档:commons-net-3.6-javadoc.jar; 赠送源代码:commons-net-3.6-sources.jar; 赠送Maven依赖信息文件:commons-net-3.6.pom; 包含翻译后的API文档:commons-...

    commons-net-3.3-API文档-中文版.zip

    赠送jar包:commons-net-3.3.jar; 赠送原API文档:commons-net-3.3-javadoc.jar; 赠送源代码:commons-net-3.3-sources.jar; 赠送Maven依赖信息文件:commons-net-3.3.pom; 包含翻译后的API文档:commons-...

    commons-net-3.1.jar,3.3,3.6版本

    这个库在不同的版本中提供了各种功能的增强和优化,比如`commons-net-3.1.jar`, `commons-net-3.3.jar`, 和 `commons-net-3.6.jar`。下面将详细阐述这些版本中涉及的主要知识点: 1. **FTP(文件传输协议)支持**:...

    commons-net-jar包.zip

    Telnet协议在commons-net中也有很好的实现,包括TelnetClient类,用于建立和管理Telnet会话。开发者可以通过它与远程服务器进行交互,执行命令或获取服务器输出。 4. **NNTP支持** 新闻组协议NNTP(Network News ...

    commons-net-3.6

    - **Telnet支持**:提供了一个强大的Telnet客户端,可用于连接和交互远程服务器。 - **NNTP支持**:用于新闻组通讯,允许读取、发布和检索新闻项。 - **SMTP支持**:发送电子邮件的简单接口,支持附件和认证。 - **...

    commons-net-2.0.jar TelnetClient包.rar

    TelnetClient包,TelnetClient类根据RFC 854为Telnet协议实现了简单网络虚拟终端(NVT)。它没有实现任何其他Telnet选项,因为它打算在Java程序中使用,以提供对Telnet可访问资源的自动访问。 可以通过首先使用Socket...

    commons-net-3.1-API文档-中英对照版.zip

    赠送jar包:commons-net-3.1.jar; 赠送原API文档:commons-net-3.1-javadoc.jar; 赠送源代码:commons-net-3.1-sources.jar; 包含翻译后的API文档:commons-net-3.1-javadoc-API文档-中文(简体)-英语-对照版....

    commons-net-3.6.jar

    给不能访问这个网站的或者不想麻烦的朋友方便下载,也就1资源分算是辛苦费吧,如果你能访问下面这个网址,你也可能自己去下载:https://mvnrepository.com/artifact/commons-net/commons-net

    commons-net-3.6 jar包.zip

    在使用`commons-net-3.6.jar`时,需要注意的是,由于它是一个较老的版本,可能存在已知的安全漏洞或性能优化问题。因此,对于新的项目,建议使用最新版本的Apache Commons Net库,以获得更好的稳定性和安全性。 ...

    commons-net-2.2-API文档-中文版.zip

    赠送jar包:commons-net-2.2.jar; 赠送原API文档:commons-net-2.2-javadoc.jar; 赠送源代码:commons-net-2.2-sources.jar; 赠送Maven依赖信息文件:commons-net-2.2.pom; 包含翻译后的API文档:commons-...

    开发工具 commons-fileupload-1.3.2

    开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2...

    commons-net-3.8.0-API文档-中英对照版.zip

    赠送jar包:commons-net-3.8.0.jar; 赠送原API文档:commons-net-3.8.0-javadoc.jar; 赠送源代码:commons-net-3.8.0-sources.jar; 赠送Maven依赖信息文件:commons-net-3.8.0.pom; 包含翻译后的API文档:...

    commons-net-3.2.jar

    在本篇文章中,我们将深入探讨"commons-net-3.2.jar"这一版本的功能、特性以及如何在实际项目中应用。 一、概述 Apache Commons Net 3.2是该库的一个稳定版本,它提供了一系列接口和类,以支持各种网络协议的操作...

    commons-net-1.4.1.jar

    在这个版本中,我们聚焦于"commons-net-1.4.1.jar",这是一个专注于FTP(文件传输协议)功能的组件。该库为Java开发者提供了丰富的API,以便在他们的应用程序中轻松地集成FTP服务。 FTP是互联网上最古老的协议之一...

    完美解决:commons-net-1.4.1.jar包中ftp应用的几点问题

    使用commons-net-1.4.1.jar,FTPClient连接成功了,但是ftpClient.listFiles(path).length=0 怎么办? 下载本工具,彻底解决问题。 不要增加类,也不要修改任何代码。 不要犹豫了,干掉commons-net-1.4.1.jar包,用这...

    commons-net-3.2

    另外,还提供了`commons-net-3.2-sources.jar`,这是一个源代码文件,方便开发者查看和理解内部实现,这对于学习和调试非常有用。`commons-net-examples-3.2.jar`包含了使用示例,可以帮助初学者快速上手。最后,`...

    commons-net-ftp-2.0.jar.zip

    在这个特定的案例中,我们关注的是`commons-net-ftp-2.0.jar.zip`这个压缩包,它包含了Apache Commons Net FTP库的2.0版本。这个库对于Java开发者来说,是进行FTP文件传输的重要工具。 FTP是一种用于在互联网上传输...

Global site tag (gtag.js) - Google Analytics