我们都知道使用Socket套接字,可以让客户端来连接服务端,并提供相应的服务。那现在不仅如此,这里我们让连接的客户端能够在服务端执行相应的指令,并返回相应的执行结果
1、知识准备
1. Socket的使用,这部分可以读下列的文章。
http://blog.csdn.net/franky_jie/article/details/54987285
http://blog.csdn.net/franky_jie/article/details/55061435
2. 这里引用一个新的类
这里这个类有一个方法,可以生成一个进程对象
这里这个exec方法就可以用来执行我们想要的指令
2、实例操作
public static void test3() {
try {
ServerSocket serverSocket = new ServerSocket(8888);
while(true){
Socket socket = serverSocket.accept();
System.out.println(socket.getInetAddress());
PrintWriter clientPw = new PrintWriter(socket.getOutputStream());
Scanner clientSc = new Scanner(socket.getInputStream());
clientPw.println("请输入的你要执行的指令");
clientPw.flush();
while(clientSc.hasNextLine()){
try{
String command = clientSc.nextLine();
System.out.println(command);
//这里的这个cmd /c 参数表示在命令行下执行,执行完毕后关闭命令行并输出结果
Process p = Runtime.getRuntime().exec("cmd /c"+command);
String content = "" ;
Scanner psi = new Scanner(p.getInputStream());
while(psi.hasNextLine()){
content+=psi.nextLine()+"\r\n";
}
System.out.println("执行的结果"+content);
clientPw.println(content);
clientPw.flush();
Scanner pse = new Scanner(p.getErrorStream());
String errcontent = "" ;
while(pse.hasNextLine()){
errcontent+=pse.nextLine()+"\r\n";
}
if(!errcontent.equals("")){
clientPw.println(errcontent);
clientPw.flush();
System.out.println(errcontent);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
这样,就可以使用Socket,让连接客户端可以对服务端执行相应的指令。
3、结果截图
这里我们用Windows自带的telnet来连接这个客户端