使用Socket,让连接客户端可以对服务端执行相应的指令

时间:2022-02-16 17:26:08

我们都知道使用Socket套接字,可以让客户端来连接服务端,并提供相应的服务。那现在不仅如此,这里我们让连接的客户端能够在服务端执行相应的指令,并返回相应的执行结果
1、知识准备

1. Socket的使用,这部分可以读下列的文章。

http://blog.csdn.net/franky_jie/article/details/54987285
http://blog.csdn.net/franky_jie/article/details/55061435

2. 这里引用一个新的类
使用Socket,让连接客户端可以对服务端执行相应的指令
这里这个类有一个方法,可以生成一个进程对象
使用Socket,让连接客户端可以对服务端执行相应的指令
这里这个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来连接这个客户端
使用Socket,让连接客户端可以对服务端执行相应的指令
使用Socket,让连接客户端可以对服务端执行相应的指令