2010-11-29 80 views
2

我的這個項目的目標是讓Java感受到遠程命令提示符。使用TCP/IP套接字,我的目標是在一臺計算機上運行命令提示程序,並將所有控制虛擬地傳輸到另一端。我立刻偶然發現了Runtime.getRuntime().exec()和Process對象等,我已經解決了我的問題。使用我的遠程命令提示符,我可以運行一個命令,收集輸出,並將其發送回另一端。問題是,我似乎只能爲每個命令提示符實例運行一個命令。這不會做(我需要改變目錄,然後運行一個命令等)。我已經從這種情況中剝離了所有套接字/網絡編程以向您展示(併爲我創建一個更簡單的測試環境)。完全用Java重定向CMD.exe進程的輸入/輸出/錯誤流

import java.io.*; 


public class testingProgram { 

public static void main(String[] args) { 

    Runtime rt = Runtime.getRuntime(); 
    StringBuilder inputMessage = new StringBuilder(); 
    String resultData; 
    try { 

    Process pr = rt.exec("cmd.exe /c net user"); 
    BufferedReader processInput = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
    BufferedReader errorProcessInput = new BufferedReader(new InputStreamReader(pr.getErrorStream())); 
    PrintWriter processOut = new PrintWriter(pr.getOutputStream()); 
    while((resultData = processInput.readLine()) != null) { 
     inputMessage.append(resultData + "\n"); 
    } 
    resultData = inputMessage.toString(); 
    System.out.print(resultData); 
    } catch(IOException e) { 

    } //catch(InterruptedException e) { 

    //} 
} 

} 

我還有很多,但這是我的問題所在。我可以用socketstream中的一個簡單的變量和消息來定製命令「net user」,所以這不是我的問題。我的問題是我需要創建一個持續的命令提示符實例,保留輸入/輸出的所有重定向。基本上,我希望能夠在「淨用戶」之後發送另一個命令。

我收集並重定向了輸出流。我希望能夠做一些事情,如:

processOut.write("net user"); 

我希望能夠利用這一點,必須在命令提示符下運行命令,並保留輸出(無論是從errorStream OR InputStream的)。

我只是需要一些更多的方向,如何去做這件事。

+0

我知道如何使用線程編程,所以如果需要的話,我可以做到這一點。 – theifyppl 2010-11-29 06:22:58

回答

1

您正在告訴命令解釋器終止。在cmd.exe後刪除/ C。

cmd /? 
Starts a new instance of the Windows command interpreter 

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF] 
    [[/S] [/C | /K] string] 

/C  Carries out the command specified by string and then terminates 
/K  Carries out the command specified by string but remains 
...