1. 程式人生 > >使用RMI實現遠端方法呼叫

使用RMI實現遠端方法呼叫

題目如下:

開發一個稱為“城市資訊”伺服器的應用程式,這個城市資訊伺服器的客戶程式通過提供一個城市名,獲得這個城市的相關資訊。在此應用程式中,伺服器程式只提供兩個方法:一個獲取人口;另一個獲取溫度。

而且必須用RMI去實現。

(1)定義一個遠端介面MyRmi

檔名:MyRmi.java

  1. import java.rmi.*; 
  2. publicinterface MyRmi extends Remote { 
  3. publicint sum(String a) throws RemoteException;
  4. publicint tem(String b) throws RemoteException;
  5.  }

(2)實現遠端介面和伺服器;

檔名:RmiImpl.java

  1. import java.rmi.*; 
  2. import java.rmi.server.*; 
  3. publicclass RmiImpl extends UnicastRemoteObject 
  4. implements MyRmi { 
  5.       RmiImpl() throws RemoteException { 
  6. super(); 
  7.       } 
  8. publicint sum(String a) throws RemoteException {
  9. int s=0;
  10. if(a.equals("保定"))          
  11.                 s=
    1000000;
  12. if(a.equals("北京"))              
  13.                 s=2000000;
  14. if(a.equals("石家莊"))             
  15.                 s=1500000;                  
  16. return s;
  17.       }
  18. publicint tem(String b) throws RemoteException {
  19. int s=0;
  20. if(b.equals("保定"))              
  21.                 s=26;
  22. if(b.equals("北京"))              
  23.                 s=
    28;
  24. if(b.equals("石家莊"))             
  25.                 s=29;                   
  26. return s; 
  27.       } 
  28.   } 

檔名:RmiServer.java

  1. import java.rmi.*;
  2. import java.rmi.registry.*;
  3. publicclass RmiServer{
  4. publicstaticvoid main(String args[]) {
  5. try { 
  6.          LocateRegistry.createRegistry(8808) ;
  7.          RmiImpl Server = new RmiImpl();
  8. // 將該物件例項與名稱“SAMPLE-SERVER”捆綁 
  9.          Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
  10.          } catch (java.net.MalformedURLException me) {
  11.             System.out.println("Malformed URL: " + me.toString());
  12.          } catch (RemoteException re) { 
  13.             System.out.println("Remote exception: " + re.toString());
  14.          }
  15.      }
  16.   }

(3)使用遠端介面開發一個客戶程式;

檔名:RmiClient.java

  1. import java.rmi.*;
  2. import java.rmi.server.*;
  3. publicclass RmiClient {
  4. publicstaticvoid main(String[] args)
  5.      { 
  6. try {
  7.             String url = "//localhost:8808/SAMPLE-SERVER";
  8.             MyRmi RmiObject = (MyRmi)Naming.lookup(url);
  9.             System.out.println(" 北京市人口是 " + RmiObject.sum("北京") );
  10.             System.out.println(" 北京市溫度是 " + RmiObject.tem("北京") );
  11.          } catch (RemoteException exc) {
  12.              System.out.println("Error in lookup: " + exc.toString());
  13.          } catch (java.net.MalformedURLException exc) { 
  14.              System.out.println("Malformed URL: " + exc.toString());
  15.          } catch (java.rmi.NotBoundException exc) {
  16.              System.out.println("NotBound: " + exc.toString());
  17.          }
  18.       }
  19.    } 

(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