锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涓猚lass鐨勬柟娉曘?br /> 銆銆鎴戜釜浜鴻涓猴紝灝界RMI涓嶆槸鍞竴鐨勪紒涓氱駭榪滅▼瀵硅薄璁塊棶鏂規錛屼絾瀹冨嵈鏄渶瀹規槗瀹炵幇鐨勩備笌鑳藉浣夸笉鍚岀紪紼嬭璦寮鍙戠殑CORBA涓嶅悓鐨勬槸錛孯MI鏄竴縐嶇函Java瑙e喅鏂規銆傚湪RMI
涓紝紼嬪簭鐨勬墍鏈夐儴鍒嗛兘鐢盝ava緙栧啓銆?br />
銆銆鍦ㄧ湅鏈瘒鏂囩珷鏃訛紝鎴戝亣瀹氳鑰呴兘宸茬粡鍏峰浜嗚緝鎵庡疄鐨凧ava鍩虹鐭ヨ瘑錛屽湪榪欐柟闈㈡湁嬈犵己鐨勮鑰呰鑷闃呰鏈夊叧璧勬枡銆?br />
銆銆姒傚康
銆銆鎴戝湪鍓嶉潰宸茬粡鎻愬埌錛孯MI鏄竴縐嶈繙紼嬫柟娉曡皟鐢ㄦ満鍒訛紝鍏惰繃紼嬪浜庢渶緇堢敤鎴鋒槸閫忔槑鐨勶細鍦ㄨ繘琛岀幇鍦烘紨紺烘椂錛屽鏋滄垜涓嶈瀹冧嬌鐢ㄤ簡RNI錛屽叾浠栦漢涓嶅彲鑳界煡閬撹皟鐢ㄧ殑鏂規硶瀛樺偍鍦ㄥ叾浠?/p>
鏈哄櫒涓娿傚綋鐒朵簡錛屼簩鍙版満鍣ㄤ笂蹇呴』閮藉畨瑁呮湁Java铏氭嫙鏈猴紙JVM錛夈?br /> 銆銆鍏朵粬鏈哄櫒闇瑕佽皟鐢ㄧ殑瀵硅薄蹇呴』琚鍑哄埌榪滅▼娉ㄥ唽鏈嶅姟鍣紝榪欐牱鎵嶈兘琚叾浠栨満鍣ㄨ皟鐢ㄣ傚洜姝わ紝濡傛灉鏈哄櫒A瑕佽皟鐢ㄦ満鍣˙涓婄殑鏂規硶錛屽垯鏈哄櫒B蹇呴』灝嗚瀵硅薄瀵煎嚭鍒板叾榪滅▼娉ㄥ唽鏈嶅姟鍣?/p>
銆傛敞鍐屾湇鍔″櫒鏄湇鍔″櫒涓婅繍琛岀殑涓縐嶆湇鍔★紝瀹冨府鍔╁鎴風榪滅▼鍦版煡鎵懼拰璁塊棶鏈嶅姟鍣ㄤ笂鐨勫璞°備竴涓璞″彧鏈夊鍑烘潵鍚庯紝鐒跺悗鎵嶈兘瀹炵幇RMI鍖呬腑鐨勮繙紼嬫帴鍙c備緥濡傦紝濡傛灉鎯充嬌鏈哄櫒A
涓殑Xyz瀵硅薄鑳藉琚繙紼嬭皟鐢紝瀹冨氨蹇呴』瀹炵幇榪滅▼鎺ュ彛銆?br /> 銆銆RMI闇瑕佷嬌鐢ㄥ崰浣嶇▼搴忓拰妗嗘灦錛屽崰浣嶇▼搴忓湪瀹㈡埛绔紝妗嗘灦鍦ㄦ湇鍔″櫒绔傚湪璋冪敤榪滅▼鏂規硶鏃訛紝鎴戜滑鏃犻渶鐩存帴闈㈠瀛樺偍鏈夎鏂規硶鐨勬満鍣ㄣ?br /> 銆銆鍦ㄨ繘琛屾暟鎹氳鍓嶏紝榪樺繀欏誨仛涓浜涘噯澶囧伐浣溿傚崰浣嶇▼搴忓氨璞″鎴風鏈哄櫒涓婄殑涓涓湰鏈哄璞★紝瀹冨氨璞℃湇鍔″櫒涓婄殑瀵硅薄鐨勪唬鐞嗭紝鍚戝鎴風鎻愪緵鑳藉琚湇鍔″櫒璋冪敤鐨勬柟娉曘傜劧
鍚庯紝Stub灝變細鍚戞湇鍔″櫒绔殑Skeleton鍙戦佹柟娉曡皟鐢紝Skeleton灝變細鍦ㄦ湇鍔″櫒绔墽琛屾帴鏀跺埌鐨勬柟娉曘?br /> 銆銆Stub鍜孲keleton涔嬮棿閫氳繃榪滅▼璋冪敤灞傝繘琛岀浉浜掗氳錛岃繙紼嬭皟鐢ㄥ眰閬靛驚TCP/IP鍗忚鏀跺彂鏁版嵁銆備笅闈㈡垜浠潵澶ц嚧浜嗚В涓縐嶇О涓轟負“緇戝畾”鐨勬妧鏈?br /> 銆銆瀹㈡埛绔棤璁轟綍鏃惰璋冪敤鏈嶅姟鍣ㄧ鐨勫璞★紝浣犲彲鏇炬兂榪囦粬鏄浣曞憡璇夋湇鍔″櫒浠栨兂鍒涘緩浠涔堟牱鐨勫璞″悧錛熻繖姝f槸“緇戝畾”鐨勭殑鐢ㄦ涔嬪湴銆傚湪鏈嶅姟鍣ㄧ錛屾垜浠皢涓涓瓧絎︿覆鍙橀噺涓庝竴涓?/p>
瀵硅薄鑱旂郴鍦ㄤ竴璧鳳紙鍙互閫氳繃鏂規硶鏉ュ疄鐜幫級錛屽鎴風閫氳繃灝嗛偅涓瓧絎︿覆浼犻掔粰鏈嶅姟鍣ㄦ潵鍛婅瘔鏈嶅姟鍣ㄥ畠瑕佸垱寤虹殑瀵硅薄錛岃繖鏍鋒湇鍔″櫒灝卞彲浠ュ噯紜湴鐭ラ亾瀹㈡埛绔渶瑕佷嬌鐢ㄥ摢涓涓璞′簡銆傛墍
鏈夎繖浜涘瓧絎︿覆鍜屽璞¢兘瀛樺偍鍦ㄧ殑榪滅▼娉ㄥ唽鏈嶅姟鍣ㄤ腑銆?
銆銆鍦ㄧ紪紼嬩腑闇瑕佽В鍐崇殑闂
銆銆鍦ㄧ爺絀朵唬鐮佷箣鍓嶏紝鎴戜滑鏉ョ湅鐪嬪繀欏葷紪鍐欏摢浜涗唬鐮侊細
銆銆榪滅▼瀵硅薄錛氳繖涓帴鍙e彧瀹氫箟浜嗕竴涓柟娉曘傛垜浠簲褰撴槑鐧界殑鏄紝榪欎釜鎺ュ彛騫墮潪鎬繪槸涓嶅寘鎷柟娉曠殑浠g爜鑰屽彧鍖呮嫭鏂規硶鐨勫畾涔夈傝繙紼嬪璞″寘鍚瀵煎嚭鐨勬瘡涓柟娉曠殑瀹氫箟錛屽畠榪樺疄
鐜癑ava.rmi涓殑榪滅▼鎺ュ彛銆?br />
銆銆榪滅▼瀵硅薄瀹炵幇錛氳繖鏄竴涓疄鐜拌繙紼嬪璞$殑綾匯傚鏋滃疄鐜頒簡榪滅▼瀵硅薄錛屽氨鑳藉瑕嗙洊璇ュ璞′腑鐨勬墍鏈夋柟娉曪紝鍥犳錛岃繙紼嬪璞$殑瀹炵幇綾誨皢鐪熸鍖呭惈鎴戜滑甯屾湜瀵煎嚭鐨勬柟娉曠殑浠g爜銆?br />
銆銆榪滅▼鏈嶅姟鍣細榪欐槸涓涓綔涓烘湇鍔″櫒浣跨敤鐨勭被錛屽畠鏄浉瀵逛簬瑕佽闂繙紼嬫柟娉曠殑瀹㈡埛绔岃█鐨勩傚畠瀛樺偍鐫緇戝畾鐨勫瓧絎︿覆鍜屽璞°?br />
銆銆榪滅▼瀹㈡埛绔細榪欐槸涓涓府鍔╂垜浠闂繙紼嬫柟娉曟彁渚涘府鍔╃殑綾伙紝瀹冧篃鏄渶緇堢敤鎴楓傛垜浠皢浣跨敤鏌ユ壘鍜岃皟鐢ㄨ繙紼嬫柟娉曠殑鏂規硶鍦ㄨ綾諱腑璋冪敤榪滅▼鏂規硶銆?br />
銆銆緙栫▼
銆銆鎴戜滑灝嗛鍏堢紪鍐欒繙紼嬪璞★紝騫跺皢浠g爜淇濆瓨涓哄悕瀛椾負AddServer.Java鐨勬枃浠訛細
銆銆import Java.rmi.*;
銆銆public interface AddServer extends Remote {
銆銆public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException;
銆銆}
銆銆鎴戜滑鏉ョ湅鐪嬩笂闈㈢殑浠g爜銆傞鍏堬紝涓轟簡浣跨敤鍏跺唴瀹癸紝鎴戜滑瀵煎叆rmi鍖呫傜劧鍚庯紝鎴戜滑鍒涘緩涓涓墿灞曚簡Java.rmi涓繙紼嬫帴鍙g殑鎺ュ彛銆傛墍鏈夌殑榪滅▼瀵硅薄蹇呴』鎵╁睍璇ヨ繙紼嬫帴鍙o紝鎴戜滑灝嗚
榪滅▼鎺ュ彛縐頒負AddServer銆傚湪璇ヨ繙紼嬪璞′腑錛屾湁涓涓悕瀛椾負AddNumbers鐨勬柟娉曪紝瀹㈡埛绔彲浠ヨ皟鐢ㄨ繖涓鏂規硶銆傛垜浠繀欏昏浣忕殑鏄紝鎵鏈夌殑榪滅▼鏂規硶閮介渶瑕佸惎
鍔≧emoteException鏂規硶錛屾湁閿欒鍙戠敓鏃跺氨浼氳皟鐢ㄨ鏂規硶銆?br />
銆銆涓嬮潰鎴戜滑寮濮嬬紪鍐欒繙紼嬪璞$殑瀹炵幇銆傝繖鏄竴涓疄鐜拌繙紼嬪璞″茍鍖呭惈鏈夋墍鏈夋柟娉曚唬鐮佺殑綾伙紝灝嗕笅闈㈢殑浠g爜淇濆瓨涓哄悕瀛椾負AddServerImpl.Java鐨勬枃浠訛細
銆銆import Java.rmi.*;
銆銆public class AddServerImpl extends UnicastRemoteObject implements AddServer {
銆銆public AddServerImpl() {
銆銆super();
銆銆}
銆銆public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException {
銆銆return firstnumber + secondnumber;
銆銆}
銆銆}
銆銆棣栧厛錛屾垜浠鍏mi鍖咃紝鐒跺悗鍒涘緩涓涓墿灞昒nicastRemoteObject鍜屽疄鐜板垱寤虹殑榪滅▼瀵硅薄鐨勭被錛涘叾嬈★紝鎴戜滑鍙互涓虹被鍒涘緩涓涓己鐪佺殑鏋勫緩鍣ㄣ傛垜浠繕浜嗚В浜咥ddNumbers鏂?/p>
娉曠殑浠g爜錛屽畠鍚姩RemoteException銆傝繖鏍鋒垜浠氨瑕嗙洊浜嗗垱寤虹殑榪滅▼瀵硅薄涓殑鏂規硶銆侫ddNumbers鏂規硶鐨勪唬鐮侀潪甯稿ソ鐞嗚В錛屽畠鎺ュ彈2涓暣鍨嬪弬鏁幫紝鐒跺悗鐩稿姞騫惰繑鍥炲畠浠殑鍜屻?br />
銆銆鑷蟲錛屾垜浠凡緇忔湁浜嗕簩涓狫ava鏂囦歡錛氳繙紼嬪璞″拰榪滅▼瀵硅薄鐨勫疄鐜般備笅闈㈡垜浠皢浣跨敤Javac鍛戒護緙栬瘧榪欎簩涓枃浠訛細
銆銆緙栬瘧榪滅▼瀵硅薄錛?br />
銆銆C:\jdk\bin\Javac workingdir\AddServer.Java
銆銆緙栬瘧榪滅▼瀵硅薄瀹炵幇錛?br />
銆銆C:\jdk\bin\Javac workingdir\AddServerImpl.Java 榪欐牱錛屽氨浼氳揪鍒頒簩涓狫ava鏂囦歡鍜屼簩涓被鏂囦歡錛屼笅闈㈡垜浠皢鍒涘緩stub鍜宻keleton銆備負浜嗗垱寤簊tub鍜宻keleton鏂囦歡錛?/p>
鎴戜滑蹇呴』浣跨敤rmic緙栬瘧鍣ㄧ紪璇戣繙紼嬪璞″疄鐜版枃浠躲?br /> 銆銆鐢≧mic緙栬瘧榪滅▼瀵硅薄瀹炵幇鏂囦歡錛?br /> 銆銆C:\jdk\bin\rmic workingdir\AddServerImpl.Java 鐒跺悗錛屾垜浠氨浼氬彂鐜板浜?涓柊寤虹殑綾繪枃浠訛紝瀹冧滑鍒嗗埆鏄疉ddServerImpl_Stub.class
鍜孉ddServerImpl_Skel.class 銆?br />
銆銆The Coding (Contd.)
銆銆鎴戜滑宸茬粡緙栬瘧浜嗘墍鏈夌殑婧愪唬鐮侊紝涓嬮潰鎴戜滑鏉ュ垱寤哄鎴風鍜屾湇鍔″櫒绔紝灝嗕笅闈㈢殑浠g爜淇濆瓨涓哄悕瀛椾負RmiServer.Java鐨勬枃浠訛細
銆銆import Java.rmi.*;
銆銆import Java.net.*;
銆銆public class RmiServer {
銆銆public static void main (String args[]) throws RemoteException, MalformedURLException {
銆銆AddServerImpl add = new AddServerImpl();
銆銆Naming.rebind("addnumbers",add);
銆銆}
銆銆}
銆銆棣栧厛錛屾垜浠鍏ava.rmi鍖呭拰Java.net鍖呫傚彟澶栵紝鎴戜滑榪樹嬌鐢╰hrows浠庡彞鎹曡幏浠諱綍寮傚父銆傛垜浠粠瀵硅薄涓緱鍑鴻繙紼嬪璞″疄鐜幫紝浣跨敤rebind鏂規硶灝嗗瓧絎︿覆addnumbers涓庤瀵?/p>
璞$粦瀹氥備笅闈㈢殑渚嬪瓙鏄劇ず浜嗙粦瀹氱殑鍚箟錛?br /> 銆銆浠庣幇鍦ㄥ紑濮嬶紝鏃犺浣曟椂瀹㈡埛绔璋冪敤榪滅▼瀵硅薄錛屼嬌鐢ㄥ瓧絎︿覆addnumbers灝卞彲浠ュ疄鐜般俽ebind鏂規硶鏈変簩涓弬鏁幫細絎竴涓弬鏁版槸瀛楃涓插彉閲忥紝絎簩涓弬鏁版槸榪滅▼瀵硅薄瀹炵幇綾葷殑
瀵硅薄銆?br />
銆銆涓嬮潰鎴戜滑鏉ュ垱寤哄鎴風錛屽皢涓嬮潰鐨勪唬鐮佷繚瀛樹負鍚嶅瓧涓篟miClient.Java鐨勬枃浠訛細
銆銆import Java.rmi.*;
銆銆import Java.net.*;
銆銆public class RmiClient {
銆銆public static void main(String args[]) throws RemoteException, MalformedURLException {
銆銆String url="rmi://127.0.0.1/addnumbers";
銆銆AddServer add;
銆銆add = (AddServer)Naming.lookup(url);
銆銆int result = add.AddNumbers(10,5);
銆銆System.out.println(result);
銆銆}
銆銆}
銆銆棣栧厛錛屾垜浠鍏ava.rmi鍖呭拰Java.net鍖咃紝騫朵嬌鐢╰hrows浠庡彞鎹曡幏鎵鏈夊繀瑕佺殑寮傚父銆傜劧鍚庨氳繃鍒╃敤Naming綾諱腑鐨勯潤鎬乴ookup鏂規硶浠庤繙紼嬪璞′腑寰楀埌涓涓璞°傦紙榪欎篃鏄垜
浠棤闇浠嶯aming綾諱腑寰楀埌涓涓璞″茍璋冪敤瀹冦傝屽彧浣跨敤綾誨悕瀛楃殑鍘熷洜銆傦級
銆銆lookup鏂規硶鎺ュ彈榪滅▼瀵硅薄鐨勫畬鏁寸殑URL鍚嶅瓧錛岃URL鐢卞畬鏁寸殑鏈哄櫒IP鍦板潃浠ュ強涓庡璞$粦瀹氱殑瀛楃涓詫紙涔熻瀵硅薄鐨勭粦瀹氬悕錛夌粍鎴愩傚湪璋冪敤榪滅▼瀵硅薄鏃訛紝鎴戜滑浣跨敤浜哛MI鍗?/p>
璁俵ookup鏂規硶鍚戞垜浠繑鍥炰竴涓璞★紝鍦ㄨ兘澶熶嬌鐢ㄥ畠鍓嶏紝鎴戜滑蹇呴』灝嗗畠鐨勬暟鎹被鍨嬭漿鎹負涓庤繙紼嬪璞$殑鏁版嵁綾誨瀷涓鑷淬?br />
銆銆Since we have both our server and client source ready, let's compile them both:
銆銆鑷蟲錛屾垜浠凡緇忔湁浜嗘湇鍔″櫒绔拰瀹㈡埛绔殑婧愪唬鐮侊紝涓嬮潰鎴戜滑鏉ョ紪璇戣繖浜屼釜婧愭枃浠訛細
銆銆緙栬瘧榪滅▼鏈嶅姟鍣細
銆銆C:\jdk\bin\Javac workingdir\RmiServer.Java
銆銆緙栬瘧榪滅▼瀹㈡埛绔細
銆銆C:\jdk\bin\Javac workingdir\RmiClient.Java
銆銆鍦ㄥ鎴戜滑鐨勪唬鐮佽繘琛屾祴璇曞墠錛岃繕蹇呴』棣栧厛鍚姩RMI Registry銆俁MI Registry瀛樺偍鏈夋墍鏈夌粦瀹氱殑鏁版嵁錛屾病鏈夊畠錛孯MI灝變笉鑳芥甯稿湴榪愯錛?br />
銆銆鍚姩Rmi Registry鏈嶅姟鍣細
銆銆C:\jdk\bin\start rmiregistry
銆銆鎴戜滑浼氭敞鎰忓埌錛岃繖鏃朵細鍑虹幇涓涓┖鐧界殑DOS鎻愮ず絎︾獥鍙o紝榪欒〃鏄嶳mi Registry鏈嶅姟鍣ㄥ湪榪愯錛屾敞鎰忎笉瑕佸叧闂紿楀彛銆傜劧鍚庯紝鎴戜滑棣栧厛鍦ㄤ竴涓狣OS鎻愮ず絎︾獥鍙d腑榪愯Rmi鏈嶅姟
鍣紝鐒跺悗鍦ㄥ彟涓涓狣OS鎻愮ず絎︾獥鍙d腑榪愯Rmi瀹㈡埛绔?br />
銆銆鍚姩RMI鏈嶅姟鍣細
銆銆C:\jdk\bin\Java workingdir\RmiServer
銆銆鍚姩RMI瀹㈡埛绔細
銆銆C:\jdk\bin\Java workingdir\RmiClient
銆銆濡傛灉涓鍒囨甯革紝鎴戜滑搴旇鑳藉寰楀埌15榪欎釜杈撳嚭銆傛垜浠悜AddNumbers鏂規硶杈撳叆10鍜?浜屼釜鏁板瓧錛岃鏂規硶灝嗚繖浜岃呭姞璧鋒潵錛屽茍灝嗗叾鍜?5榪斿洖緇欐垜浠傚鏋滃緱鍒頒簡15榪欎釜杈撳嚭錛?/p>
璇存槑鎴戜滑宸茬粡鎴愬姛鍦版墽琛屼簡涓涓繙紼嬫柟娉曘傚綋鐒訛紝鍦ㄨ繖閲岋紝鎴戜滑騫舵病鏈夋墽琛岀湡姝f剰涔変笂鐨勮繙紼嬫柟娉曪紝鍥犱負鎴戜滑鐨勮綆楁満鏃㈡槸鏈嶅姟鍣紝鍙堟槸瀹㈡埛鏈恒傚鏋滄湁璁$畻鏈虹綉緇滐紝鎴戜滑灝卞彲浠?/p>
鏂逛究鍦拌繘琛屾墽琛岃繙紼嬫柟娉曠殑璇曢獙浜嗐?/p>