銆銆涓嬮潰鎴戜滑涓姝ヤ竴姝ュ緩绔嬩竴涓畝鍗曠殑RMI緋葷粺銆傞鍏堝湪浣犵殑鏈哄櫒閲屽緩绔嬩竴涓柊鐨勬枃浠跺す錛屼互渚挎斁緗垜浠垱寤虹殑鏂囦歡錛屼負浜嗙畝鍗曡搗瑙侊紝鎴戜滑鍙嬌鐢ㄤ竴涓枃浠跺す瀛樻斁瀹㈡埛绔拰鏈嶅姟绔唬鐮侊紝騫朵笖鍦ㄥ悓涓涓洰褰曚笅榪愯鏈嶅姟绔拰瀹㈡埛绔?br>銆銆濡傛灉鎵鏈夌殑RMI鏂囦歡閮藉凡緇忚璁″ソ浜嗭紝閭d箞浣犻渶瑕佷笅闈㈢殑鍑犱釜姝ラ鍘葷敓鎴愪綘鐨勭郴緇燂細
銆銆1銆?nbsp; 緙栧啓騫朵笖緙栬瘧鎺ュ彛鐨凧ava浠g爜
銆銆2銆?nbsp; 緙栧啓騫朵笖緙栬瘧鎺ュ彛瀹炵幇鐨凧ava浠g爜
銆銆3銆?nbsp; 浠庢帴鍙e疄鐜扮被涓敓鎴?nbsp;Stub 鍜?nbsp;Skeleton 綾繪枃浠?br>銆銆4銆?nbsp; 緙栧啓榪滅▼鏈嶅姟鐨勪富榪愯紼嬪簭
銆銆5銆?nbsp; 緙栧啓RMI鐨勫鎴風紼嬪簭
銆銆6銆?nbsp; 瀹夎騫朵笖榪愯RMI緋葷粺
鎴戠殑紼嬪簭鏄湪NetBeans IDE 5.5鍜孞DK1.6涓嬬紪鍐欑殑錛屽綋鐒惰繍琛屾槸鍦ㄥ懡浠ゆ彁紺虹涓嬭繘琛岀殑
1銆佹帴鍙?br>絎竴姝ュ氨鏄緩绔嬪拰緙栬瘧鏈嶅姟鎺ュ彛鐨凧ava浠g爜銆傝繖涓帴鍙e畾涔変簡鎵鏈夌殑鎻愪緵榪滅▼鏈嶅姟鐨勫姛鑳斤紝鍦ㄨ繖閲屾垜浠墍鏈夊畬鎴愮殑灝辨槸鍔犲噺涔橀櫎錛屼笅闈㈡槸婧愮▼搴忥細
- package rmiDemo;
- //Calculator.java
- //define the interface
- import java.rmi.Remote;
-
- public interface Calculator extends Remote
- {
- public long add(long a, long b)
- throws java.rmi.RemoteException;
-
- public long sub(long a, long b)
- throws java.rmi.RemoteException;
-
- public long mul(long a, long b)
- throws java.rmi.RemoteException;
-
- public long div(long a, long b)
- throws java.rmi.RemoteException;
- }
娉ㄦ剰錛氳繖涓帴鍙g戶鎵胯嚜Remote錛屾瘡涓涓畾涔夌殑鏂規硶閮藉繀欏繪姏鍑轟竴涓猂emoteException寮傚父瀵硅薄銆?br>寤虹珛榪欎釜鏂囦歡錛屾妸瀹冨瓨鏀懼湪鍒氭墠鐨勭洰褰曚笅錛屽茍涓旂紪璇戙?br>
2銆佹帴鍙g殑鍏蜂綋瀹炵幇
銆銆涓嬩竴姝ワ紝鎴戜滑灝辮鍐欒繙紼嬫湇鍔$殑鍏蜂綋瀹炵幇錛岃繖鏄竴涓狢alculatorImpl綾繪枃浠訛細
- package rmiDemo;
- //CalculatorImpl.java
- //Implementation
- import java.rmi.server.UnicastRemoteObject;
-
- public class CalculatorImpl extends UnicastRemoteObject implements Calculator
- {
-
- // 榪欎釜瀹炵幇蹇呴』鏈変竴涓樉寮忕殑鏋勯犲嚱鏁幫紝騫朵笖瑕佹姏鍑轟竴涓猂emoteException寮傚父
- public CalculatorImpl()
- throws java.rmi.RemoteException {
- super();
- }
-
- public long add(long a, long b)
- throws java.rmi.RemoteException {
- return a + b;
- }
-
- public long sub(long a, long b)
- throws java.rmi.RemoteException {
- return a - b;
- }
-
- public long mul(long a, long b)
- throws java.rmi.RemoteException {
- return a * b;
- }
-
- public long div(long a, long b)
- throws java.rmi.RemoteException {
- return a / b;
- }
- }
銆銆榪欎釜瀹炵幇綾諱嬌鐢ㄤ簡UnicastRemoteObject鍘昏仈鎺MI緋葷粺銆傚湪鎴戜滑鐨勪緥瀛愪腑錛屾垜浠槸鐩存帴鐨勪粠UnicastRemoteObject榪欎釜綾諱笂緇ф壙鐨勶紝浜嬪疄涓婂茍涓嶄竴瀹氳榪欐牱鍋氾紝濡傛灉涓涓被涓嶆槸浠嶶nicastRmeoteObject涓婄戶鎵匡紝閭e繀欏諱嬌鐢ㄥ畠鐨別xportObject()鏂規硶鍘昏仈鎺ュ埌RMI銆?br>銆銆濡傛灉涓涓被緇ф壙鑷猆nicastRemoteObject錛岄偅涔堝畠蹇呴』鎻愪緵涓涓瀯閫犲嚱鏁板茍涓斿0鏄庢姏鍑轟竴涓猂emoteException瀵硅薄銆傚綋榪欎釜鏋勯犲嚱鏁拌皟鐢ㄤ簡super()錛屽畠涔呮縺媧籙nicastRemoteObject涓殑浠g爜瀹屾垚RMI鐨勮繛鎺ュ拰榪滅▼瀵硅薄鐨勫垵濮嬪寲銆?br>3銆丼tubs 鍜孲keletons
銆銆涓嬩竴姝ュ氨鏄浣跨敤RMI緙栬瘧鍣╮mic鏉ョ敓鎴愭々鍜屾鏋舵枃浠訛紝榪欎釜緙栬瘧榪愯鍦ㄨ繙紼嬫湇鍔″疄鐜扮被鏂囦歡涓娿?br> 鍦↖DE涓璪uild鎵鏈夌▼搴?br>銆銆>rmic rmiDemoCalculatorImpl
銆銆鍦ㄤ綘鐨勭洰褰曚笅榪愯涓婇潰鐨勫懡浠わ紝鎴愬姛鎵ц瀹屼笂闈㈢殑鍛戒護浣犲彲浠ュ彂鐜頒竴涓狢alculator_stub.class鏂囦歡錛屽鏋滀綘鏄嬌鐢ㄧ殑Java2SDK錛岄偅涔堜綘榪樺彲浠ュ彂鐜癈alculator_Skel.class鏂囦歡銆?br>
銆銆4銆佷富鏈烘湇鍔″櫒
銆銆榪滅▼RMI鏈嶅姟蹇呴』鏄湪涓涓湇鍔″櫒涓繍琛岀殑銆侰alculatorServer綾繪槸涓涓潪甯哥畝鍗曠殑鏈嶅姟鍣ㄣ?br>
- package rmiDemo;
- //CalculatorServer.java
- import java.rmi.Naming;
-
- public class CalculatorServer {
-
- public CalculatorServer() {
- try {
- Calculator c = new CalculatorImpl();
- Naming.rebind("rmi://localhost:1099/CalculatorService", c);
- } catch (Exception e) {
- System.out.println("Trouble: " + e);
- }
- }
-
- public static void main(String args[]) {
- new CalculatorServer();
- }
- }
銆銆5銆佸鎴風
銆銆瀹㈡埛绔簮浠g爜濡備笅錛?br>
- package rmiDemo;
- //CalculatorClient.java
-
- import java.rmi.Naming;
- import java.rmi.RemoteException;
- import java.net.MalformedURLException;
- import java.rmi.NotBoundException;
-
- public class CalculatorClient {
-
- public static void main(String[] args) {
- try {
- Calculator c = (Calculator)
- Naming.lookup(
- "rmi://localhost
- /CalculatorService");
- System.out.println( c.sub(4, 3) );
- System.out.println( c.add(4, 5) );
- System.out.println( c.mul(3, 6) );
- System.out.println( c.div(9, 3) );
- }
- catch (MalformedURLException murle) {
- System.out.println();
- System.out.println(
- "MalformedURLException");
- System.out.println(murle);
- }
- catch (RemoteException re) {
- System.out.println();
- System.out.println(
- "RemoteException");
- System.out.println(re);
- }
- catch (NotBoundException nbe) {
- System.out.println();
- System.out.println(
- "NotBoundException");
- System.out.println(nbe);
- }
- catch (
- java.lang.ArithmeticException
- ae) {
- System.out.println();
- System.out.println(
- "java.lang.ArithmeticException");
- System.out.println(ae);
- }
- }
- }
銆銆淇濆瓨榪欎釜瀹㈡埛绔▼搴忓埌浣犵殑鐩綍涓嬶紙娉ㄦ剰榪欎釜鐩綍鏄竴寮濮嬪緩绔嬮偅涓紝鎵鏈夌殑鎴戜滑鐨勬枃浠墮兘鍦ㄩ偅涓洰褰曚笅錛夈?br> 鍦↖DE涓璪uild鎵鏈夌▼搴忋?br>銆銆6銆佽繍琛孯MI緋葷粺
銆銆鐜板湪鎴戜滑寤虹珛浜嗘墍鏈夎繍琛岃繖涓畝鍗昍MI緋葷粺鎵闇鐨勬枃浠訛紝鐜板湪鎴戜滑緇堜簬鍙互榪愯榪欎釜RMI緋葷粺鍟︼紒鏉ヤ韓鍙楀惂銆?br>
銆銆鎴戜滑鏄湪鍛戒護鎺у埗鍙頒笅榪愯榪欎釜緋葷粺鐨勶紝浣犲繀欏誨紑鍚笁涓帶鍒跺彴紿楀彛錛屼竴涓繍琛屾湇鍔″櫒錛屼竴涓繍琛屽鎴風錛岃繕鏈変竴涓繍琛孯MIRegistry銆?br>
銆銆棣栧厛榪愯娉ㄥ唽紼嬪簭RMIRegistry錛屼綘蹇呴』鍦ㄥ寘鍚綘鍒氬啓鐨勭被鐨勯偅涔堢洰褰曚笅榪愯榪欎釜娉ㄥ唽紼嬪簭銆?br>
銆銆>rmiregistry
銆銆濂斤紝榪欎釜鍛戒護鎴愬姛鐨勮瘽錛屾敞鍐岀▼搴忓凡緇忓紑濮嬭繍琛屼簡錛屼笉瑕佺浠栵紝鐜板湪鍒囨崲鍒板彟澶栦竴涓帶鍒跺彴錛屽湪絎簩涓帶鍒跺彴閲岋紝鎴戜滑榪愯鏈嶅姟鍣–alculatorService錛屽洜涓篟MI鐨勫畨鍏ㄦ満鍒跺皢鍦ㄦ湇鍔$鍙戠敓浣滅敤,鎵浠ヤ綘蹇呴』澧炲姞涓鏉″畨鍏ㄧ瓥鐣ャ備互涓嬫槸瀵瑰簲瀹夊叏絳栫暐鐨勪緥瀛?nbsp;
grant {
permission java.security.AllPermission "", "";
};
銆銆娉ㄦ剰:榪欐槸涓鏉℃渶綆鍗曠殑瀹夊叏絳栫暐,瀹冨厑璁鎬換浣曚漢鍋氫換浣曚簨,瀵逛簬浣犵殑鏇村姞鍏抽敭鎬х殑搴旂敤,浣犲繀欏繪寚瀹氭洿鍔犺緇嗗畨鍏ㄧ瓥鐣ャ?br>
銆銆鐜板湪涓轟簡榪愯鏈嶅姟绔紝浣犻渶瑕侀櫎瀹㈡埛綾?CalculatorClient.class)涔嬪鐨勬墍鏈夌殑綾繪枃浠躲傜‘璁ゅ畨鍏ㄧ瓥鐣ュ湪policy.txt鏂囦歡涔嬪悗,浣跨敤濡備笅鍛戒護鏉ヨ繍琛屾湇鍔″櫒銆?br>
銆銆> java -Djava.security.policy=C:\Documents and Settings\Administrator\RMI\build\classes\ rmiDemo.CalculatorServer
銆銆榪欎釜鏈嶅姟鍣ㄥ氨寮濮嬪伐浣滀簡錛屾妸鎺ュ彛鐨勫疄鐜板姞杞藉埌鍐呭瓨絳夊緟瀹㈡埛绔殑鑱旀帴銆傚ソ鐜板湪鍒囨崲鍒扮涓変釜鎺у埗鍙幫紝鍚姩鎴戜滑鐨勫鎴風銆?br>
銆銆涓轟簡鍦ㄥ叾浠栫殑鏈哄櫒榪愯瀹㈡埛绔▼搴忎綘闇瑕佷竴涓繙紼嬫帴鍙?Calculator.class) 鍜屼竴涓猻tub(CalculatorImpl_Stub.class)銆?nbsp;浣跨敤濡備笅鍛戒護榪愯瀹㈡埛绔?br>
銆銆 > java -Djava.security.policy=C:\Documents and Settings\Administrator\RMI\build\classes\ rmiDemo. CalculatorClient
銆銆濡傛灉鎵鏈夌殑榪欎簺閮芥垚鍔熻繍琛岋紝浣犲簲璇ョ湅鍒頒笅闈㈢殑杈撳嚭錛?br>銆銆1
銆銆9
銆銆18
銆銆3
銆銆