我对这个项目的目标是使用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) {
//}
}
}
我还有很多,但这就是我的问题所在。我可以使用一个简单的变量和来自socketstream的消息自定义命令“net user”,这不是我的问题。我的问题是我需要创建一个持续的命令提示实例,保留输入/输出的所有重定向。基本上,我希望能够在“网络用户”之后发送另一个命令。
我已经收集并重定向了输出流。我希望能够做到这样的事情:
processOut.write("net user");
我希望能够使用它,让命令提示符运行命令,并保留输出(无论是来自errorStream还是inputStream)。
我还需要更多关于如何做到这一点的方向。
答案 0 :(得分:1)
你应该研究多线程。你基本上想要的是一个不断运行和维护rt的线程。
像这样:
String commandLine;
while ((commandLine = System.in.readline()) != 'q') {
Process pc = rt.exec(commandLine);
}
有关多线程的进一步参考: http://download.oracle.com/javase/tutorial/essential/concurrency/procthread.html
问题是您的程序在一次通话后终止。
欢呼声
答案 1 :(得分:1)
你告诉命令解释器终止。在cmd.exe之后删除/ C.
cmd /?
Starts a new instance of the Windows command interpreter
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
/C Carries out the command specified by string and then terminates
/K Carries out the command specified by string but remains
...