我的這個項目的目標是讓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的)。
我只是需要一些更多的方向,如何去做這件事。
我知道如何使用線程編程,所以如果需要的話,我可以做到這一點。 – theifyppl 2010-11-29 06:22:58