论坛首页 Java企业应用论坛

使用 Commons Net 2.0,一个简单的JAVA Telnet 客户端实现

浏览 18449 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-02  

一个简单的JAVA Telnet 客户端实现

 

commons-net-2.0.jar telnet功能的简单使用,

这个包实现了很多基本的基于Intenet协议,下面是 commons 支持的协议:

  • FTP/FTPS
  • NNTP
  • SMTP
  • POP3
  • Telnet
  • TFTP
  • Finger
  • Whois
  • rexec/rcmd/rlogin
  • Time (rdate) and Daytime
  • Echo
  • Discard
  • NTP/SNTP

下面简单写一个程序做telnet的测试,此程序仅作测试,所以很多写法并不规范。

 

 

import java.io.IOException;

import java.io.InputStream;

import java.io.PrintStream;

 

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

 

public class CommonsTelnetTest {

       private final String ip = ""; // 要telnet的IP地址

       private final String port = "23"; //端口号,默认23

       private final String user = "";//用户名

       private final String pwd = ""; //用户密码

       private final String osTag = "$";// 系统标示符号

       private final TelnetClient tc = new TelnetClient(); //新建一个 TelnetClient对象,此对象是 commons-net-2.0.jar包提供

       private InputStream in; // 输入流,接收返回信息

       private PrintStream out; //像 服务器写入 命令

 

       public void connect() {

              try {

                     tc.connect(ip, Integer.parseInt(port));

                     in = tc.getInputStream();

                     out = new PrintStream(tc.getOutputStream());

              } catch (Exception e) {

                     System.out.println("connect error !");

              }

       }

 

       public String execute(String command) {

              connect();

              out.println(command);

              out.flush();

 

              StringBuffer sb = new StringBuffer();

 

              try {

                     char ch = (char) in.read();

                     while (true) {

                            sb.append(ch);

                            if (ch == osTag.charAt(osTag.length() - 1)) {

                                   if (sb.toString().endsWith(osTag))

                                          return sb.toString();

                            }

                            ch = (char) in.read();

                     }

 

              } catch (IOException e) {

                     e.printStackTrace();

              }

              return "error! when the program execute";

       }

       

       public static void main(String [] args){

              System.out.println(new CommonsTelnetTest().execute("ls"));

       }

 

}

 

 

这是 commons 2.0 API的地址 :http://commons.apache.org/net/apidocs/index.html

 

   发表时间:2008-12-17  
请问这个小程序只能用在lunix下吗?
0 请登录后投票
   发表时间:2008-12-18  
lcmlcm 写道

请问这个小程序只能用在lunix下吗?

当然不是了,这个小程序在FTP、TELNET 等都可以的,只要你配置端口号,和系统标示符号比如 部分UNIX可以配置成$,连接FTP可以配置成FTP>
0 请登录后投票
   发表时间:2009-05-31   最后修改:2009-06-01
while (true) {  
 
                            sb.append(ch);  
 
                            if (ch == osTag.charAt(osTag.length() - 1)) {  
 
                                   if (sb.toString().endsWith(osTag))  
 
                                          return sb.toString();  
 
                            }  
 
                            ch = (char) in.read();  
 
                     }  
如果ch == osTag.charAt(osTag.length() - 1) 条件始终不成立 会怎么样?
0 请登录后投票
   发表时间:2009-07-28  
chenyongxin 写道
while (true) {  
 
                            sb.append(ch);  
 
                            if (ch == osTag.charAt(osTag.length() - 1)) {  
 
                                   if (sb.toString().endsWith(osTag))  
 
                                          return sb.toString();  
 
                            }  
 
                            ch = (char) in.read();  
 
                     }  
如果ch == osTag.charAt(osTag.length() - 1) 条件始终不成立 会怎么样?



ch == osTag.charAt(osTag.length() - 1) 是用来判断 操作系统结束字符的,
有的时候比如  帮助文档  ,你需要发继续发空格 给操作系统,这样才能保证收到操作系统的结束符号,实际中  会有各种各样的问题。。。。
0 请登录后投票
   发表时间:2009-07-30  
如何避免返回输入命令
commnons-net-2.0 会把命令和结果集一起返回来

$ ls
返回结果
ls
结果集
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics