實現遠程調用的方法


方法(一):利用java.rmi.registry.LocateRegistry實現RMI調用

      1.創建遠程接口

遠程接口中聲明了可以被客戶程序訪問的遠程方法。只要一個類繼承了java.rmi.Remote接口,該對象才能成為遠程對象,對象中指定的方法才能被遠程調用。

 

 

2.實現遠程接口

 

3.生成存根(Stub)

這是運行前的截圖:

 

A.先javac編譯文件

 

            B.然后生成存根

 

            C.將存根放到客戶端里

 

4.啟動服務器程序

先start rmiregistry(如果代碼中沒有自帶的啟動服務的部分),后Java HelloServer(在Server文件夾下)

 

5.運行客戶端程序

 

 

 

方法(二):利用javx.naming.Context實現RMI調用

  1. 將服務器代碼和客戶端代碼進行更改,改變成使用naming.Context類的新代碼,並編譯

 

  1. 然后分別運行客戶端和服務器端

 

 

 

簽到系統實現

運行截圖:

1.啟動服務器

 

2.啟動客戶端

學生版:

 

老師版:

 

3.提交簽到信息

學生顯示:

 

老師顯示:

 

4.查看數據是否存儲

 

 

完成!

 

 

 javax.naming.Context 與java.rmi.registry.LocateRegistry的區別

  1. Naming類只是在“遠程對象注冊表”上進行存儲和讀取操作,該類並不能創建“遠程對象注冊表”;
  2. LocateRegistry類可以獲取“遠程對象注冊表”引用,或者創建本地主機上的“遠程對象注冊表”;
  3. Naming類方法封裝了Registry接口方法,只需要一個URL就能對“遠程對象注冊表”進行相關操作。
  4. LocateRegistry類獲取到Registry對象引用后,通過Registry類方法對“遠程對象注冊表”進行相關操作

 

 

錯誤總結:

1.嘗試了不生成存根就啟動client,出現報錯

 

      發現由於LocateRegistry 用於獲取特定主機(包括本地主機)上的遠程對象注冊表的引用,或用於創建一個接受對特定端口調用的遠程對象注冊表。

      所以要從client本地獲取存根,所以用rmic生成存根並轉移到client文件夾中后,代碼正確運行。

2.rmic警告

 

仔細閱讀后發現只是建議不再使用,實際查看文件夾下已經生成了Stub文件,所以不存在硬性問題。

3.1099端口占用問題

在使用服務器端的時候,要運行“start rmiregistry”來啟動JDK自帶的注冊表程序,它用於保存Server類注冊的遠程對象並允許遠程客戶端的請求訪問。然后再運行服務器端的Server類,即“java Server”,該程序向注冊表中注冊具體的遠程對象。

但實際使用時出現了1099端口占用問題,打開了rmiregistry就無法啟動服務器端,用netstat -ano,列出所有端口的情況后,發現rmiregistry本身占用了1099端口,再查看代碼

 

所以代碼中已經包含啟動的部分,改進后並不需要手動啟動,所以就直接運行即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM