2011-04-28 39 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