使用RMI實現遠端方法呼叫
阿新 • • 發佈:2019-01-08
題目如下:
開發一個稱為“城市資訊”伺服器的應用程式,這個城市資訊伺服器的客戶程式通過提供一個城市名,獲得這個城市的相關資訊。在此應用程式中,伺服器程式只提供兩個方法:一個獲取人口;另一個獲取溫度。
而且必須用RMI去實現。
(1)定義一個遠端介面MyRmi
檔名:MyRmi.java
- import java.rmi.*;
- publicinterface MyRmi extends Remote {
- publicint sum(String a) throws RemoteException;
- publicint tem(String b) throws RemoteException;
- }
(2)實現遠端介面和伺服器;
檔名:RmiImpl.java
- import java.rmi.*;
- import java.rmi.server.*;
- publicclass RmiImpl extends UnicastRemoteObject
- implements MyRmi {
- RmiImpl() throws RemoteException {
- super();
- }
- publicint sum(String a) throws RemoteException {
- int s=0;
- if(a.equals("保定"))
- s=
1000000;- if(a.equals("北京"))
- s=2000000;
- if(a.equals("石家莊"))
- s=1500000;
- return s;
- }
- publicint tem(String b) throws RemoteException {
- int s=0;
- if(b.equals("保定"))
- s=26;
- if(b.equals("北京"))
- s=
28;- if(b.equals("石家莊"))
- s=29;
- return s;
- }
- }
檔名:RmiServer.java
- import java.rmi.*;
- import java.rmi.registry.*;
- publicclass RmiServer{
- publicstaticvoid main(String args[]) {
- try {
- LocateRegistry.createRegistry(8808) ;
- RmiImpl Server = new RmiImpl();
- // 將該物件例項與名稱“SAMPLE-SERVER”捆綁
- Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
- } catch (java.net.MalformedURLException me) {
- System.out.println("Malformed URL: " + me.toString());
- } catch (RemoteException re) {
- System.out.println("Remote exception: " + re.toString());
- }
- }
- }
(3)使用遠端介面開發一個客戶程式;
檔名:RmiClient.java
- import java.rmi.*;
- import java.rmi.server.*;
- publicclass RmiClient {
- publicstaticvoid main(String[] args)
- {
- try {
- String url = "//localhost:8808/SAMPLE-SERVER";
- MyRmi RmiObject = (MyRmi)Naming.lookup(url);
- System.out.println(" 北京市人口是 " + RmiObject.sum("北京") );
- System.out.println(" 北京市溫度是 " + RmiObject.tem("北京") );
- } catch (RemoteException exc) {
- System.out.println("Error in lookup: " + exc.toString());
- } catch (java.net.MalformedURLException exc) {
- System.out.println("Malformed URL: " + exc.toString());
- } catch (java.rmi.NotBoundException exc) {
- System.out.println("NotBound: " + exc.toString());
- }
- }
- }
(4)產生樁和構架。
編寫一個批處理檔案Build.bat,方便操作。寫入下面內容.
javac MyRmi.java RmiImpl.java RmiServer.java RmiClient.java
rmic -v1.2 Rmilmpl
其中rmic -v1.2 Rmilmpl會在目錄下產生RmiImpl_Stub.class
(5)啟動RMI登錄檔。
rmiregistry
這條命令用於啟動RMI伺服器。可以新增到上面的批處理後面。
(6)執行伺服器和客戶程式。
寫兩個批處理檔案,執行服務端和客戶端
java RmiServer
java RmiClient