Java Processbuilder输出流
我目前正在用java开发某种远程cmd,并使用ProcessBuilder运行cmd会话。但是我有一个问题,我可以得到cmd的输出,但是我不知道如何将命令发送到正在运行的cmd会话中以便执行它们 这是我的服务器代码:Java Processbuilder输出流,java,sockets,cmd,Java,Sockets,Cmd,我目前正在用java开发某种远程cmd,并使用ProcessBuilder运行cmd会话。但是我有一个问题,我可以得到cmd的输出,但是我不知道如何将命令发送到正在运行的cmd会话中以便执行它们 这是我的服务器代码: ServerSocket server = new ServerSocket(port); while(true){ Socket socket = server.accept();
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) {
}
Thread.sleep(100)代码>是一种代码气味/反模式