2015-07-20 105 views
0

我試圖通過ProcessBuilder讀取/寫入telnet進程的值。使用ProcessBuilder讀取/寫入telnet進程

public static void main(String[] args) { 
     try { 
      telnetProcess = new ProcessBuilder("C:\\Windows\\System32\\telnet.exe","x.x.x.x").start(); 
      telnetInputReader = new BufferedReader(new InputStreamReader(telnetProcess.getInputStream())); 
      telnetOuputWriter = new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream())); 
      expectPattern("login:"); 
      sendCmd("user"); 
      expectPattern("password:"); 
      sendCmd("pwd"); 
      expectPattern("switch>#"); 
      sendCmd("exit"); 
      expectPattern("Connection to host lost"); 
     } catch (IOException ex) { 
      System.out.println("Exception : " + ex); 
     } 
    } 

我有以下錯誤

java.io.IOException: Cannot run program "C:\Windows\System32\telnet.exe": CreateProcess error=2, The system cannot find the file specified 

我試圖改變的文件路徑UNIX格式風格像C:/Windows/System32/telnet.exe和沒有運氣。 (雖然我預計它不會工作)。然後將telnet.exe從它的位置複製到其他用戶的主目錄,但我沒有收到任何錯誤。 (???)

但是,我沒有看到預期的輸出。我沒有從流程中得到任何迴應,並退出了代碼。

public static void sendCmd(String cmd) { 
     System.out.println(cmd); 
     try { 
      telnetOuputWriter.write(cmd + "\n", 0, cmd.length()); 
     } catch (IOException ex) { 
      Logger.getLogger(TelnetProcessHandler.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

    public static String expectPattern(String pattern) { 
     String cmdResponse = ""; 
     try { 
      String line = ""; 
      // Always getting 'null' here 
      while ((line = telnetInputReader.readLine()) != null) { 
       System.out.println(line); 
       cmdResponse += line; 
       if (line.contains(pattern)) { 
        break; 
       } 
      } 
     } catch (IOException ex) { 
      System.out.println("ex : " + ex); 
     } 
     return cmdResponse; 
    } 

這是什麼問題?然後,另一個查詢。我一直在使用PrintWriter用於寫入過程中該消息又在它BufferedWriter,像試過,

telnetOuputWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream()))); 

這是罰款,這種情況下使用PrintWriter

注:由於一些原因,我想堅持使用telnet通過工藝手段,而不是用SocketTelnetClientexpect4j

回答

1

遠程登錄程序不使用標準的輸入和輸出流與用戶通信,它需要直接使用控制檯設備。你必須找到另一種做你想做的事情的方法。

例如,您可以使用實現telnet協議的Java庫。看到這個問題,例如:Open source Telnet Java API