<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      對于遠程方法調用(RMI)的完成

      [摘要]遠程方法調用 遠程方法調用(Remote Method Invocation ,RMI)使用戶能訪問在另一 主機上的Java對象,并遠程調用其方法。程序的對象是客戶,而遠程對象是服 務器。遠程對象也...

      遠程方法調用

      遠程方法調用(Remote Method Invocation ,RMI)使用戶能訪問在另一
      主機上的Java對象,并遠程調用其方法。程序的對象是客戶,而遠程對象是服
      務器。遠程對象也可以是另一個遠程服務對象的客戶。通過使用持續性(串行
      化和解串行化),本地對象和原始類型值可以作為參數傳遞給遠程對象。這種
      方式允許Java程序可以利用分布式計算將工作量分散到多個Java虛擬機上。

      工作原理
      RMI系統結構,在客戶端和服務器端都有幾層結構。
      --------- ----------
      客戶 服務器
      ---------- ----------

      ------------- ----------
      占位程序 骨干網
      -------------- -----------

      ------------------------------------
      遠 程 引 用 層
      ------------------------------------

      ------------------------------------
      傳 輸 層
      ------------------------------------

      方法調用從客戶對象經占位程序(Stub)、遠程引用層(Remote Reference
      Layer)和傳輸層(Transport Layer)向下,傳遞給主機,然后再次經傳
      輸層,向上穿過遠程調用層和骨干網(Skeleton),到達服務器對象。
      占位程序扮演著遠程服務器對象的代理的角色,使該對象可被客戶激活。
      遠程引用層處理語義、管理單一或多重對象的通信,決定調用是應發往一個
      服務器還是多個。傳輸層管理實際的連接,并且追追蹤可以接受方法調用的
      遠程對象。服務器端的骨干網完成對服務器對象實際的方法調用,并獲取返
      回值。返回值向下經遠程引用層、服務器端的傳輸層傳遞回客戶端,再向上
      經傳輸層和遠程調用層返回。最后,占位程序獲得返回值。

      要完成以上步驟需要有以下幾個步驟:
      1、生成一個遠程接口
      2、實現遠程對象(服務器端程序)
      3、生成占位程序和骨干網(服務器端程序)
      4、編寫服務器程序
      5、編寫客戶程序
      6、注冊遠程對象
      7、啟動遠程對象

      具體實現如下:
      1、生成一個遠程接口
      package c15.ptime;
      import java.rmi.*;

      public interface PerfectTimeI extends Remote {
      long getPerfectTime() throws RemoteException;
      }

      2、實現遠程對象(服務器端程序)
      package c15.ptime;
      import java.rmi.*;
      import java.rmi.server.*;
      import java.rmi.registry.*;
      import java.net.*;

      public class PerfectTime
      extends UnicastRemoteObject
      implements PerfectTimeI {
      public long getPerfectTime()
      throws RemoteException {
      return System.currentTimeMillis();
      }

      public PerfectTime() throws RemoteException {
      super();
      }

      public static void main(String[] args) {
      System.setSecurityManager(
      new RMISecurityManager());
      try {
      PerfectTime pt = new PerfectTime();
      Naming.rebind(
      "http://zhouty:2005/PerfectTime" , pt);
      System.out.println("Ready to do time");
      } catch(Exception e) {
      e.printStackTrace();
      }
      }
      }

      4、編譯遠程對象(服務器端程序)
      javac -classpath . -d . PerfectTime.java

      5、生成根和干(占位程序和骨干程序)
      rmic -classpath . -d . c15.ptime.PerfectTime

      6、注冊遠程對象
      start rmiregistry 2005

      7、啟動服務器端程序
      java -Djava.rmi.server.codebase=file:///d:/TestRMI/ c15.ptime.Per
      fectTime

      8、編寫客戶端程序
      package c15.ptime;
      import java.rmi.*;
      import java.rmi.registry.*;

      public class DisplayPerfectTime {
      public static void main(String[] args) {
      System.setSecurityManager(
      new RMISecurityManager());
      try {
      PerfectTimeI t =
      (PerfectTimeI)Naming.lookup(
      "192.168.0.171:2005/PerfectTime");
      for(int i = 0 ; i < 10; i++)
      System.out.println("Perfect time =" +
      t.getPerfectTime());
      } catch(Exception e) {
      e.printStackTrace();
      }
      }
      }

      9、編譯客端程序
      javac -classpath . -d . DisplayPerfectTime.java

      10、修改JVM的配置文件 (客戶機和服務器的都需要經過修改)
      %JRE_HOME%\policytool.exe

      11、啟動客戶程序
      java -classpath . c15.ptime.DisplayPerfectTime

      12、返回結果

      Perfect time =967274884390
      Perfect time =967274884450
      Perfect time =967274884450
      Perfect time =967274884450
      Perfect time =967274884500
      Perfect time =967274884500
      Perfect time =967274884560
      Perfect time =967274884610
      Perfect time =967274884610
      Perfect time =967274884610


      <------------ 完 ------------->
      參考:
      《JAVA 編程思想》
      《輕松掌握JBUILDER2》
      《SUN JDK文檔》


      --
      我思,故我在





      日韩精品一区二区三区高清