2011-04-28 54 views
2

可能重复:
How to send commands to puttyJava和腻子 - 发送命令

我怎么能发送到腻子用java命令? 我必须使用腻子。 我的意思是发送指令到腻子窗口,例如Java应该向腻子窗口发送“ls -l”。

+1

你需要SSH吗? – 2011-04-28 11:22:03

+1

你的意思是发送击键到腻子窗口?或者你的意思是使用Java来建立SSL/SSH连接?或者你的意思是使用putty打开一个ssh隧道,然后从java连接到那个隧道? – Liv 2011-04-28 11:22:22

回答

5

要使用腻子从Java™,你需要使用腻子的(命令行)链接砰砰。你可以从Putty的下载页面得到这个:Putty Download Page

你将需要运行putty.exe来配置一个会话(在我的例子中我做了一个配置文件名“profile”)。然后您可以加载会话并发送/接收信息。不要忘记确保您同时检查标准输入流和错误输入流。

为了确保您能够从Java运行它™,你可能需要做的三两件事之一:

  1. 将putty.exe和plink.exe如C的地方:\ WINDOWS \
  2. 将putty.exe和plink.exe放在一个文件夹中,并将该文件夹添加到系统环境(推荐方法)。
  3. 将putty.exe和plink.exe放入与您的Java™应用程序相同的文件夹中,并确保正确引用它。

这里是示例代码。

try { 
    String command = "plink -load profile"; 

    Runtime r = Runtime.getRuntime(); 
    Process p = r.exec (command); 
    std = p.getInputStream(); 
    out = p.getOutputStream(); 
    err = p.getErrorStream(); 

    out.write ("ls -l\n".getBytes()); 
    out.flush(); 

    Thread.sleep (1000); 

    int value = 0; 
    if (std.available() > 0) { 
     System.out.println ("STD:"); 
     value = std.read(); 
     System.out.print ((char) value); 

     while (std.available() > 0) { 
      value = std.read(); 
      System.out.print ((char) value); 
     } 
    } 

    if (err.available() > 0) { 
     System.out.println ("ERR:"); 
     value = err.read(); 
     System.out.print ((char) value); 

     while (err.available() > 0) { 
      value = err.read(); 
      System.out.print ((char) value); 
     } 
    } 

    p.destroy(); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 

希望这可以帮助那些对快速建立Java快速Putty感兴趣的人。这也是获得串口通信而不需要本地驱动程序等的好方法(尽管功能有限)。

+0

您能否详细说明为什么需要'Thread.sleep(1000)'? – 2017-04-06 13:51:49

+0

Thread.sleep(1000)需要给运行时环境一些时间获取输出流。 – 2017-04-07 06:34:22

+0

如果我不使用输出流,我不需要睡眠权吗? – 2017-04-07 07:55:36

1

你不要必须使用腻子。使用java库连接到SSH会好得多。有关针对SSH的Java库的讨论,请参阅SSH library for Java