• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 關于遠程方法調用(RMI)的實現

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    遠程方法調用 遠程方法調用(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文檔》


    --
    我思,故我在

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>