JDK的文档中带有RMI的教程,简单易懂,建议学习

解决方案 »

  1.   

    class 附:完整的RMI远程执行命令代码/******************************************************************************Description: (RMI) Remote Command Execute     Author: JetKingLau       Email: [email protected]   FileName: ExecutePort.java******************************************************************************/package RemoteExecute;public class ExecutePort { public static int PortNumber = 3200;
    public static String  ServerName = "ExecuteServer"; public void ExecutePort() {
    } public String getHostName(String hostName) {
    return "//" + hostName + ":" + String.valueOf(PortNumber) + "/" + ServerName;
    }
    }/******************************************************************************Description: (RMI) Remote Command Execute     Author: JetKingLau       Email: [email protected]   FileName: ExecuteInterface.java******************************************************************************/package RemoteExecute;import java.io.*;
    import java.rmi.Remote;
    import java.rmi.RemoteException;public interface ExecuteInterface extends Remote {
    public String  executeCommand(String remoteCommand) throws RemoteException;
    }/******************************************************************************Description: (RMI) Remote Command Execute     Author: JetKingLau       Email: [email protected]   FileName: ExecuteImpl.java******************************************************************************/package RemoteExecute;import java.io.*;
    import java.rmi.*;
    import java.rmi.server.UnicastRemoteObject;public class ExecuteImpl extends UnicastRemoteObject implements ExecuteInterface { private String name;
    private ExecutePort executePort = new ExecutePort(); public ExecuteImpl(String s) throws RemoteException{
    super();
    name = s;
    } public String executeCommand(String remoteCommand){ ExecutePort executePort = new ExecutePort();
    String stringReturn = "";
    try {
    System.out.println(remoteCommand);
             Process cmd = Runtime.getRuntime().exec(remoteCommand);
             BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(cmd.getInputStream()), 4096);
    String stringLine;         while((stringLine = bufferedReader.readLine()) != null) {
    stringReturn = stringReturn + "<br/>" + stringLine;
             }
    return stringReturn;
    }
    catch(Exception e) {
    System.out.println(executePort.ServerName + " exception: " + e.getMessage());
    e.printStackTrace();
    return null;
    }
    } public static void main(String argv[]) {
    ExecutePort executePort = new ExecutePort();
    if(System.getSecurityManager() == null) {
    System.setSecurityManager(new RMISecurityManager());
    }
    try {
    ExecuteImpl ei = new ExecuteImpl(executePort.ServerName);
    Naming.rebind(executePort.getHostName("127.0.0.1"), ei);
    System.out.println("ServerName: " + executePort.ServerName);
    System.out.println("PortNumber: " + String.valueOf(executePort.PortNumber));
    }
    catch(Exception e) {
    System.out.println(executePort.ServerName + " exception: " + e.getMessage());
    e.printStackTrace();
    }
    }}/******************************************************************************Description: (RMI) Remote Command Execute     Author: JetKingLau       Email: [email protected]   FileName: ExecuteClient.java******************************************************************************/package RemoteExecute;import java.io.*; 
    import java.rmi.*;public class ExecuteClient{
    public static void main(String argv[]) {
    if(argv.length != 2) {
    System.out.println("Usage: java ExecuteClient machineName remoteCommand");
    System.exit(0);
    }
    ExecuteClient ec = new ExecuteClient();
    System.out.println(ec.executeCommand(argv[0], argv[1]));
    } public ExecuteClient() {
    } public String executeCommand(String hostName, String remoteCommand) { ExecutePort executePort = new ExecutePort();
    try {
    ExecuteInterface ei = (ExecuteInterface) Naming.lookup(executePort.getHostName(hostName));
    return ei.executeCommand(remoteCommand);
    }
    catch(Exception e) {
    System.err.println(executePort.ServerName + " exception: "+ e.getMessage());
    e.printStackTrace();
    return null;
    }
    }
    }/******************************************************************************Description: (RMI) Remote Command Execute     Author: JetKingLau       Email: [email protected]   FileName: ExecuteServlet.java******************************************************************************/package RemoteExecute;import java.io.*;
    import java.rmi.*;
    import javax.servlet.*;
    import javax.servlet.http.*;public class ExecuteServlet extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException
        { ExecutePort executePort = new ExecutePort();
          
            response.setContentType("text/html; charset=gb2312");
            PrintWriter out = response.getWriter(); String hostName = request.getParameter("HostName");
    String cmdString = request.getParameter("CommandString");// out.println("<br/><b>Host Name:</b> " + hostName);
    // out.println("<br/><b>Remote Command:</b> " + cmdString);
    // out.println("<br/>"); if( "".equals(hostName) || "".equals(cmdString) ) {
    return;
    }
    try {
    ExecuteClient ec = new ExecuteClient();
    out.println(ec.executeCommand(hostName, cmdString));
    }
    catch(Exception e) {
    System.err.println(executePort.ServerName + " exception: "+ e.getMessage());
    e.printStackTrace();
    }
    return;
        }
    }/******************************************************************************Description: (RMI) Remote Command Execute     Author: JetKingLau       Email: [email protected]   FileName: ExecuteServer.policy******************************************************************************/grant {
    permission java.security.AllPermission "", "";
    };
     
    {
    public static void main(String[] args) 
    {
    System.out.println("Hello World!");
    }
    }
      

  2.   

    <core java>第二卷上的第五章就是讲的RMI,另外可以参考《master EJB2》的后面的附录上的rmi-iiop的