Моя цель с этим проектом состояла в том, чтобы получить удаленное командное сообщение с Java. Используя сокеты TCP/IP, я стремился запустить процесс командной строки на одном компьютере и фактически передать все элементы управления другой стороне. Я сразу наткнулся на Runtime.getRuntime(). Exec() и объекты Process и т. Д. Я решил проблему примерно наполовину. С помощью моей команды удаленной команды я могу запустить одну команду, собрать выход и отправить его обратно на другую сторону. Проблема в том, что я могу только запустить одну команду на экземпляр командной строки. Этого не будет (с ситуациями, когда мне нужно сменить каталог и THEN запустите команду и т. Д.). Я отключил все сокет/сетевое программирование из этой ситуации, чтобы показать вам (и создать для меня более легкую среду тестирования).Перенаправление потоков ввода/вывода/ошибок процесса CMD.exe Полностью с Java
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) {
//}
}
}
У меня есть намного больше, но это - то, где моя проблема. Я могу настроить команду «net user» с помощью простой переменной и сообщения из сокета, так что это не моя проблема. Моя проблема в том, что мне нужно создать текущий экземпляр командной строки, сохраняя все перенаправления ввода/вывода. В принципе, я хотел бы иметь возможность отправить еще одну команду ПОСЛЕ «net user».
Я собрал и перенаправил выходной поток. Я хочу быть в состоянии сделать что-то вроде:
processOut.write("net user");
Я хочу, чтобы иметь возможность использовать это, есть в командной строке выполнить команду, и сохранить выход (будь то из errorStream ИЛИ в InputStream).
Мне просто нужно еще какое-то направление относительно того, как это сделать.
Я знаю, как программировать с помощью Threads, поэтому, если это необходимо, я могу это сделать. – theifyppl 2010-11-29 06:22:58