Моя цель в этом проекте состояла в том, чтобы создать удаленную командную строку в Java. Используя сокеты TCP / IP, я стремился запустить процесс командной строки на одном компьютере и фактически передать все управление на другую сторону. Я сразу же наткнулся на объекты Runtime.getRuntime (). Exec (), Process и т. Д. Я решил свою проблему на полпути. С моей удаленной командной строкой я могу запустить одну команду, собрать выходные данные и отправить их обратно на другую сторону. Проблема в том, что я могу только запустить одну команду на экземпляр командной строки. Это не сработает (в ситуациях, когда мне нужно сменить каталог, а затем запустить команду и т. Д.). Я вычеркнул из этой ситуации все сокетное / сетевое программирование, чтобы показать вам (и создать для меня более простую среду тестирования).
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» с помощью простой переменной и сообщения от socketstream, так что это не моя проблема. Моя проблема заключается в том, что мне нужно создать текущий экземпляр командной строки, сохраняя все перенаправления ввода / вывода. По сути, я хотел бы иметь возможность отправить еще одну команду ПОСЛЕ «net user».
Я собрал и перенаправил поток вывода. Я хочу быть в состоянии сделать что-то вроде:
processOut.write("net user");
Я хочу иметь возможность использовать это, заставить командную строку выполнить команду и сохранить вывод (будь то из errorStream ИЛИ inputStream).
Мне просто нужно больше указаний о том, как это сделать.