涓洪氳繃緗戠粶鎵ц鍏朵粬鏈哄櫒涓婄殑浠g爜錛屼紶緇熺殑鏂規(guī)硶涓嶄粎闅句互瀛︿範(fàn)錛岃屼笖鏄撳嚭閿欍傝В鍐寵繖涓棶棰樼殑鏈浣蟲(chóng)柟娉曟槸錛氭煇浜涘璞℃濂戒綅浜庡彟涓鍙版満鍣紝鎴戜滑鍙互鍙戦佷竴鏉℃秷鎭紝騫惰幏寰楄繑鍥炵粨鏋滐紝灝卞儚浣嶄簬鑷繁鐨勬湰鏈哄櫒涓鏍楓?SPAN lang=EN-US>Java榪滅▼鏂規(guī)硶璋冪敤(RMI)鐗規(guī)т嬌瀹㈡埛鏈轟笂榪愯鐨勭▼搴忓彲浠ヨ皟鐢ㄨ繙紼嬫湇鍔″櫒涓婄殑瀵硅薄銆傝繙紼嬫柟娉曡皟鐢ㄧ壒鎬т嬌Java緙栫▼浜哄憳鑳藉鍦ㄧ綉緇滅幆澧冧腑鍒嗗竷鎿嶄綔銆?/SPAN>
涓嬮潰浠嬬粛涓涓嬪繀瑕佺殑姝ラ錛屽垱寤鴻嚜宸辯殑RMI瀵硅薄銆?/SPAN>
RMI瀵規(guī)帴鍙f湁鐫寮虹儓鐨勪緷璧栥傚湪闇瑕佸垱寤轟竴涓繙紼嬪璞$殑鏃跺欙紝鎴戜滑閫氳繃浼犻掍竴涓帴鍙f潵闅愯棌鍩哄眰鐨勫疄鏂界粏鑺傘傛墍浠ュ鎴峰緱鍒拌繙紼嬪璞$殑涓涓彞鏌勬濂藉悓涓浜涙湰鍦扮殑鏍逛唬鐮佽繛鎺ワ紝鏈夊悗鑰呰礋璐i氳繃緗戠粶閫氫俊銆備絾鎴戜滑騫朵笉鍏沖績(jī)榪欎簺浜嬫儏錛岄氳繃鑷繁鐨勬帴鍙e彞鏌勫彂閫佹秷鎭嵆鍙?/SPAN>
鍒涘緩涓涓繙紼嬫帴鍙f椂錛屽繀欏婚伒瀹堜笅鍒楄鍒欙細(xì)
1) 榪滅▼鎺ュ彛蹇呴』涓?SPAN lang=EN-US>public灞炴?涓嶈兘鏈夆滃寘璁塊棶鈥濓紱涔熷氨鏄錛屼粬涓嶈兘鏄滃弸濂界殑鈥?銆傚惁鍒欙紝涓鏃﹀鎴瘋瘯鍥捐杞戒竴涓疄鐜頒簡(jiǎn)榪滅▼鎺ュ彛鐨勮繙紼嬪璞★紝灝變細(xì)寰楀埌涓涓敊璇?/SPAN>
2) 榪滅▼鎺ュ彛蹇呴』鎵╁睍鎺ュ彛java.rmi.Remote銆?/SPAN>
3) 闄や笌搴旂敤紼嬪簭鏈韓鏈夊叧鐨勮繚渚嬶紝榪滅▼鎺ュ彛涓殑姣忎釜鏂規(guī)硶閮藉繀欏誨湪鑷繁鐨?SPAN lang=EN-US>throws浠庡彞涓0鏄巎ava.rmi.RemoteException.
4) 浣滀負(fù)鍙傛暟鎴栬繑鍥炲間紶閫掔殑涓涓繙紼嬪璞?SPAN lang=EN-US>(涓嶇鏄洿鎺ワ紝榪樻槸鏈湴瀵硅薄涓祵鍏?蹇呴』澹版槑涓鴻繙紼嬫帴鍙o紝涓嶅彲澹版槑涓哄疄鏂界被銆?/SPAN>
涓嬮潰鏄竴涓繙紼嬫帴鍙gず渚嬶紝
//PerfectTimeI.java
//The PerfectTime remote interface
package rmi.sample.server;
import java.rmi.*;
public interface PerfectTimeI extends Remote {
long getPerfectTime() throws RemoteException;
}
瀹冭〃闈笂涓庡叾浠栫殑鎺ュ彛綾諱技錛屽彧鏄Remote榪涜浜?jiǎn)鎵╁睍锛岃屼笖鎵鏈夌殑鏂規(guī)硶閮戒細(xì)鈥滄幏鈥濆嚭RemoteException.鎺ュ彛鍜屾柟娉曢兘鏄疨ublic鐨勩?
緙栬瘧PerfectTimeI.java,鐢熸垚PerfectTimeI.class(test鏄寘錛岀紪璇戞椂娉ㄦ剰璺緞)
javac rmi.sample.server.PerfectTimeI.java
鏈嶅姟鍣ㄥ繀欏誨寘鍚竴涓墿灞曚簡(jiǎn)UnicastRemoteObject綾伙紝騫跺疄鐜拌繙紼嬫帴鍙c傝繖涓被涔熷彲浠ュ惈鏈夐檮鍔犵殑鏂規(guī)硶錛屼絾瀹㈡埛鍙兘浣跨敤榪滅▼鎺ュ彛涓殑鏂規(guī)硶銆傚洜涓哄鎴鋒槸鎸囧悜鎺ュ彛鐨勪竴涓彞鏌勶紝鑰屼笉鏄畠鐨勫摢涓被銆?/SPAN>
蹇呴』涓鴻繙紼嬪璞″畾涔夋瀯浠跺櫒錛屽嵆浣垮彧鍑嗗瀹氫箟涓涓粯璁ゆ瀯浠跺櫒錛岀敤瀹冭皟鐢ㄥ熀紜綾繪瀯浠跺櫒銆傚繀欏繪妸瀹冩槑紜湴緙栧啓鍑烘潵錛屽洜涓哄畠蹇呴』鈥滄幏鈥濆嚭RemoteException榪濅緥銆?/SPAN>
涓嬮潰鍒楀嚭榪滅▼鎺ュ彛PerfectTime鐨勪簨瀹炶繃紼嬶細(xì)浠栦唬琛ㄧ簿紜鏃舵湇鍔?/SPAN>
//PerfectTime.java
//The implementation of the PerfectTime remote object
package rmi.sample.server;
import java.net.*;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI {
//榛樿鏋勪歡鍣紝涔熻鈥滄幏鈥濆嚭RemoteException榪濅緥銆?nbsp;
public PerfectTime() throws RemoteException {
super();
}
public long getPerfectTime() throws RemoteException {
return System.currentTimeMillis();
}
public static void main(String[] args) {
/*鍒涘緩鍜屽畨瑁呬竴涓畨鍏ㄧ鐞嗗櫒錛屼護(hù)鍏舵敮鎸丷MI.浣滀負(fù)Java寮鍙戝寘鐨勪竴閮ㄥ垎錛岄傜敤浜嶳MI鍞竴涓涓槸RMISecurityManager.*/
// System.setSecurityManager(new RMISecurityManager());
try {
/*鍒涘緩榪滅▼瀵硅薄鐨勪竴涓垨澶氫釜瀹炰緥錛屼笅闈㈡槸PerfectTime瀵硅薄*/
PerfectTime pt = new PerfectTime();
/*鍚慠MI榪滅▼瀵硅薄娉ㄥ唽琛ㄦ敞鍐岃嚦灝戜竴涓繙紼嬪璞°備竴涓繙紼嬪璞℃嫢鏈夌殑鏂規(guī)硶鍗沖彲鐢熸垚鎸囧悜鍏朵粬榪滅▼瀵硅薄鐨勫彞鏌勶紝榪欐牱錛屽鎴峰埌娉ㄥ唽琛ㄩ噷璁塊棶涓嬈★紝寰楀埌絎竴涓繙紼嬪璞″嵆鍙?*/
Naming.bind("PerfectTime", pt);
System.out.println("Ready to do Time");
} catch (Exception e) {
e.printStackTrace();
}
}
}
緙栬瘧PerfectTime.java,鐢熸垚PerfectTime.class(rmi.sample.server鏄寘錛岀紪璇戞椂娉ㄦ剰璺緞)
javac rmi.sample.server.PerfectTime.java
鍒涘緩RemoteObject鐨勪富騫插拰妗嗘灦銆傝瀹屾垚榪欎釜宸ヤ綔鍙嬌鐢╮mic緙栬瘧鍣紝rmic緙栬瘧鍣ㄧ敓鎴愯繙紼嬪璞$殑瀛樻牴鍜岄鏋躲傚瓨鏍癸紙Stub錛夋槸榪滅▼瀵硅薄鍦ㄥ鎴風(fēng)鐨勪唬鐞嗭紝瀹冨皢RMI璋冪敤浼犻掔粰鏈嶅姟鍣ㄧ鐨勯鏋訛紙Skeleton錛夛紝鍚庤呰礋璐e皢璇ヨ皟鐢ㄤ紶閫掔粰瀹為檯鐨勮繙紼嬫柟娉?/SPAN>杈撳叆濡備笅錛?/P>
rmic rmi.sample.server.PerfectTime 鎵ц榪欎釜鍛戒護(hù)錛?/SPAN> 鑻?SPAN lang=EN-US>rmic鎴愬姛榪愯錛宺mi.sample.server鐩綍閲屽氨浼?xì)澶氬囖Z袱涓柊綾伙細(xì)
PerfectTime_Stub.class
PerfectTime_Skel.class
瀹冧滑鍒嗗埆瀵瑰簲鐨勬槸鏍?SPAN lang=EN-US>(stub)鍜岄鏋?skeleton).
RMI鍏ㄩ儴鐨勫畻鏃ㄥ氨鏄彲鑳界畝鍖栬繙紼嬫帴鍙e璞$殑浣跨敤銆傛垜浠鎴風(fēng)▼搴忎腑瑕佸仛鐨勫敮涓涓浠墮澶栦簨鎯呮槸鏌ユ壘浠庢湇鍔″櫒鍙栧洖榪滅▼鎺ュ彛銆備笅闈㈠氨鏄紪鍐欑殑Java紼嬪簭錛氬皢娑堟伅鍙戠粰瀵硅薄錛?/SPAN>
//DisplayPerfectTime.java
//Users remote object PerfectTime
package rmi.sample.client;
import java.rmi.*;
import java.rmi.registry.*;
public class DisplayPerfectTime {
/*** DisplayPerfectTime 鏋勯犲瓙娉ㄨВ銆?/
public DisplayPerfectTime() {
super();
}
public static void main(String[] args) {
// System.setSecurityManager(new RMISecurityManager());
try {
PerfectTimeI t = (PerfectTimeI) Naming.lookup("PerfectTime");
for (int i = 0; i < 10; i++) {
System.out.println("PerfectTime:" + t.getPerfectTime());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
緙栬瘧DisplayPerfectTime.java.
javac rmi.sample.client.DisplayPerfectTime.java
鍦ㄨ繍琛?SPAN lang=EN-US>PerfectTime綾誨拰DisplayPectTime綾諱箣鍓嶏紝鐢ㄦ埛蹇呴』棣栧厛鍦ㄥ皢瑕佸涓籔erfectTime鐨勮綆楁満涓婂惎鍔≧MI娉ㄥ唽(Registry)紼嬪簭錛屽嵆浣垮皢瑕佽繍琛孭erfectTime鐨勮綆楁満涓庤繍琛孌isplayPerfectTime鐨勬槸鍚屼竴鍙版満鍣?榪欎竴姝ヤ篃鏄繀欏葷殑銆傛敞鍐岃〃鏈嶅姟鍣ㄧ殑鍚嶅瓧鏄痳miregistry.鍦?2浣峎indows鐜涓紝鍙嬌鐢細(xì) start rmiregistry 浠ゅ叾鍦ㄥ悗鍙拌繍琛屻傜劧鍚庡垎鍒紑涓や釜涓嶅悓鐨勮繘紼嬭繍琛孲erver绔拰Client绔細(xì)鍚姩娉ㄥ唽琛ㄦ湇鍔″櫒錛?/SPAN>
start rmiregistry
緇戝畾PerfectTime鍒版敞鍐岋紝榪愯鏈嶅姟绔▼搴忥細(xì)鍦╓indows涓嬶紝杈撳叆涓嬪垪鍛戒護(hù)錛屽湪鍚庡彴鍚姩PerfectTime紼嬪簭錛?/SPAN>
java rmi.sample.server.PerfectTime
Ready to do Time
榪愯瀹㈡埛绔▼搴忥細(xì)濡備笅
G:\RMI>java rmi.sample.client.DisplayPerfectTime
PerfectTime:961722589649
PerfectTime:961722589669
PerfectTime:961722589679
PerfectTime:961722589679
PerfectTime:961722589689
PerfectTime:961722589689
PerfectTime:961722589689
PerfectTime:961722589699
PerfectTime:961722589699
PerfectTime:961722589699
RMI紼嬪簭瑕佹敞鎰忎互涓嬪嚑鐐癸細(xì)
1錛宺miregistry蹇呴』瑕佽兘澶熸壘鍒皊tub,skeleton
2錛岃嫢RMI娑夊強(qiáng)鍒癝ocket璇誨啓錛屽繀欏昏嚜宸卞啓涓涓狫ava絳栫暐鏂囦歡銆?/SPAN>