gpt4 book ai didi

Java Processbuilder 输出流

转载 作者:行者123 更新时间:2023-12-01 18:04:41 25 4
gpt4 key购买 nike

我目前正在java中开发某种远程cmd,并且我正在使用ProcessBuilder来运行cmd session 。但我有一个问题,我可以获得 cmd 的输出,但我不知道如何将命令发送到正在运行的 cmd session 中以便执行它们。

这是我的服务器代码:

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.

最佳答案

我现在自己修复了它。我需要将套接字输入流读取到缓冲区,然后将其写入 cmd.exe 的输出流

try {

ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.redirectErrorStream(true);
processBuilder.command("cmd.exe");
Process process = processBuilder.start();
System.out.println("Console Started");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while(process.isAlive()) {
while(process.getInputStream().available() > 0) {
int i = process.getInputStream().read();
socket.getOutputStream().write(i);
}
while(socket.getInputStream().available() > 0) {
String line = br.readLine();
bw.write(line);
bw.newLine();
bw.flush();
}
}
process.destroy();
socket.close();
} catch(Exception e) {
}

关于Java Processbuilder 输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60577441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com