В настоящее время я работаю над каким-то удаленным cmd в java, и я использую ProcessBuilder для запуска сеанса cmd. Но у меня проблема в том, что я могу получить выходные данные cmd, но я не знаю, как отправить команды в сеанс Running cmd, чтобы они выполнялись.
Это мой код сервера:
ServerSocket server = new ServerSocket(port);
while(true){
Socket socket = server.accept();
new Thread(() -> {
try {
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("cmd.exe");
Process process = processBuilder.start();
Thread.sleep(100);
process.getOutputStream().write("dir".getBytes());
while(process.isAlive() && !socket.isClosed()) {
while(process.getInputStream().available() > 0) {
socket.getOutputStream().write(process.getInputStream().read());
}
while(process.getErrorStream().available() > 0) {
socket.getOutputStream().write(process.getErrorStream().read());
}
while(socket.getInputStream().available() > 0) {
System.out.println("input");
process.getOutputStream().write(socket.getInputStream().read());
}
}
System.out.println("EXIT");
socket.close();
} catch(Exception e) {
e.printStackTrace();
}
}).start();
}
И это мой код клиента:
Socket s = new Socket(ip, Main.CMD_PORT);
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
while(!closed) {
String line;
if(s.getInputStream().available() > 0 && (line = br.readLine()) != null) textArea.append(line + "\n");
if(buffer != "") {
s.getOutputStream().write(buffer.getBytes());
buffer = "";
}
}
System.out.println("END");
s.close();
dispose();
Буфер содержит команды, которые должны быть выполнены. Теперь, когда я запускаю оба, я получаю следующий вывод, но я не могу запустить Команды.
Microsoft Windows [Version 10.0.18362.657]
(c) 2019 Microsoft Corporation. Alle Rechte vorbehalten.