作者:bluesky35(蓝天)
  开发环境: Windows2000 + JBuilderX + JDK1.4.2
  远程方法调用(Remote Method Invocation,RMI)可以在不同的Java虚拟机(JVM)之间实现对象与对象的通信.
  使用RMI编写客户-服务器应用程序包括6个基本步骤: 1.定义远程接口 2.实现远程接口 3.编写使用远程对象的客户 4.生成stub(客户代理)以及skeletom(服务器实体) 5.启动注册表并且注册对象 6.运行服务器和客户
  下面通过一个简单的实例来介绍每一步.
  1.定义远程接口 在JBuilderX中创建一个名为rmisample的project,然后在根目录创建一个名为riminterface的class,定义接口代码如下: public class riminterface {   interface HelloInterface extends java.rmi.Remote{     public String sayHello() throws java.rmi.RemoteException;   } }
  2.实现远程接口 在project根目录再创建一个名为HelloServer的class,实现以上接口,代码如下: import java.rmi.*; import java.rmi.server.*; import java.util.Date; 
public class HelloServer extends UnicastRemoteObject implements riminterface.HelloInterface{   public HelloServer() throws RemoteException{     super();   } 
  public String sayHello() throws java.rmi.RemoteException{     return "It`s from bluesky!" + new Date();   } } 其中的sayHello就是实现了接口中sayHello的具体方法.
  3.编写使用远程对象的客户 在project根目录再创建一个名为HelloClient的class,编写使用远程对象的客户,代码如下: import java.rmi.*; 
public class HelloClient {   public static void main(String args[]){     if(System.getSecurityManager() == null){       System.setSecurityManager(new RMISecurityManager());     }     try{       riminterface.HelloInterface obj = (riminterface.HelloInterface)Naming.lookup("/HelloServer");       String message = obj.sayHello();       System.out.println(message);     }catch(Exception e){       System.out.println(e.toString());     }   } } 客户端通过Naming.lookup("/HelloServer");找到Server的远程接口并且调用其中的方法以实现虚拟机之间的相互通信.
  4.生成stub(客户代理)以及skeletom(服务器实体) 新开一个command窗口,用rmic HelloServer语句生成stub(客户代理)以及skeletom(服务器实体).生成的结果如下图所示:
   5.启动注册表并且注册对象 打开JAVA_HOME\jre\lib\security\java.policy,将原来的授权方式改成 permission java.net.SocketPermission "*:1024-65535", "accept,connect,listen,resolve";然后保存退出.使用命令rmiregistry -J-Djava.security.policy=java.policy启动注册表,如下图所示:
  
  然后在project根目录再创建一个名为RegisterIt的class,编写注册程序如下: import java.rmi.*; 
public class RegisterIt { 
  public static void main(String args[]){     try{       HelloServer obj = new HelloServer();       System.out.println("Object is" + obj);       Naming.rebind("/HelloServer",obj);       System.out.println("Already Start");     }catch(Exception e){       System.out.print(e);     }   } } 用java RegisterIt命令注册接口,如下图所示:
  
  6.运行服务器和客户 最后,运行客户端程序,如下图所示:
   
好了,关于RMI就介绍到这里,下次再见^-^!  
 
  |