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

2/22/2017来源:ASP.NET技巧人气:1214

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

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

2. 这里引用一个新的类 1 这里这个类有一个方法,可以生成一个进程对象 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来连接这个客户端 3 4