国产毛片午夜福利,国产黄网,国产亚洲天堂,97国产精品

  •  
    關(guān)于遠(yuǎn)程方法調(diào)用(RMI)的實(shí)現(xiàn)
    發(fā)布時(shí)間:2005-03-17   瀏覽次數(shù):1184805
    遠(yuǎn)程方法調(diào)用 遠(yuǎn)程方法調(diào)用(Remote Method Invocation ,RMI)使用戶能訪問(wèn)在另一 主機(jī)上的Java對(duì)象,并遠(yuǎn)程調(diào)用其方法。程序的對(duì)象是客戶,而遠(yuǎn)程對(duì)象是服 務(wù)器。遠(yuǎn)程對(duì)象也可以是另一個(gè)遠(yuǎn)程服務(wù)對(duì)象的客戶。通過(guò)使用持續(xù)性(串行 化和解串行化),本地對(duì)象和原始類型值可以作為參數(shù)傳遞給遠(yuǎn)程對(duì)象。這種 方式允許Java程序可以利用分布式計(jì)算將工作量分散到多個(gè)Java虛擬機(jī)上。 工作原理 RMI系統(tǒng)結(jié)構(gòu),在客戶端和服務(wù)器端都有幾層結(jié)構(gòu)。 --------- ---------- | 客戶 | | 服務(wù)器| ---------- ---------- | | ------------- ---------- | 占位程序 | | 骨干網(wǎng) | -------------- ----------- | | ------------------------------------ | 遠(yuǎn) 程 引 用 層 | ------------------------------------ | | ------------------------------------ | 傳 輸 層 | ------------------------------------ 方法調(diào)用從客戶對(duì)象經(jīng)占位程序(Stub)、遠(yuǎn)程引用層(Remote Reference Layer)和傳輸層(Transport Layer)向下,傳遞給主機(jī),然后再次經(jīng)傳 輸層,向上穿過(guò)遠(yuǎn)程調(diào)用層和骨干網(wǎng)(Skeleton),到達(dá)服務(wù)器對(duì)象。 占位程序扮演著遠(yuǎn)程服務(wù)器對(duì)象的代理的角色,使該對(duì)象可被客戶。 遠(yuǎn)程引用層處理語(yǔ)義、管理單一或多重對(duì)象的通信,決定調(diào)用是應(yīng)發(fā)往一個(gè) 服務(wù)器還是多個(gè)。傳輸層管理實(shí)際的連接,并且追追蹤可以接受方法調(diào)用的 遠(yuǎn)程對(duì)象。服務(wù)器端的骨干網(wǎng)完成對(duì)服務(wù)器對(duì)象實(shí)際的方法調(diào)用,并獲取返 回值。返回值向下經(jīng)遠(yuǎn)程引用層、服務(wù)器端的傳輸層傳遞回客戶端,再向上 經(jīng)傳輸層和遠(yuǎn)程調(diào)用層返回。,占位程序獲得返回值。 要完成以上步驟需要有以下幾個(gè)步驟: 1、生成一個(gè)遠(yuǎn)程接口 2、實(shí)現(xiàn)遠(yuǎn)程對(duì)象(服務(wù)器端程序) 3、生成占位程序和骨干網(wǎng)(服務(wù)器端程序) 4、編寫(xiě)服務(wù)器程序 5、編寫(xiě)客戶程序 6、注冊(cè)遠(yuǎn)程對(duì)象 7、啟動(dòng)遠(yuǎn)程對(duì)象 具體實(shí)現(xiàn)如下: 1、生成一個(gè)遠(yuǎn)程接口 package c15.ptime; import java.rmi.*; public interface PerfectTimeI extends Remote { long getPerfectTime() throws RemoteException; } 2、實(shí)現(xiàn)遠(yuǎn)程對(duì)象(服務(wù)器端程序) 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:05/PerfectTime" , pt); System.out.println("Ready to do time"); } catch(Exception e) { e.printStackTrace(); } } } 4、編譯遠(yuǎn)程對(duì)象(服務(wù)器端程序) javac -classpath . -d . PerfectTime.java 5、生成根和干(占位程序和骨干程序) rmic -classpath . -d . c15.ptime.PerfectTime 6、注冊(cè)遠(yuǎn)程對(duì)象 start rmiregistry 05 7、啟動(dòng)服務(wù)器端程序 java -Djava.rmi.server.codebase=file:///d:/TestRMI/ c15.ptime.Per fectTime 8、編寫(xiě)客戶端程序 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:05/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的配置文件 (客戶機(jī)和服務(wù)器的都需要經(jīng)過(guò)修改) %JRE_HOME%\policytool.exe 11、啟動(dòng)客戶程序 java -classpath . c15.ptime.DisplayPerfectTime 12、返回結(jié)果 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 編程思想》 《輕松掌握J(rèn)BUILDER2》 《SUN JDK文檔》 -- 我思,故我在 來(lái)源:http://edu.chinaz.com
    立即預(yù)約