使用RMI編寫客戶端-服務器應用程序,實現分佈式計算

開發環境: 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就介紹到這裏,下次再見^-^!

發佈了41 篇原創文章 · 獲贊 0 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章