隨筆-109  評論-187  文章-25  trackbacks-0

          轉自:http://m47121.blogchina.com/2555077.html

          ??????????????????????????????????????

          編程

            我們將首先編寫遠程對象,并將代碼保存為名字為AddServer.Java的文件:

          import Java.rmi.*;

          public interface AddServer extends Remote {

          public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException;

          }

            我們來看看上面的代碼。首先,為了使用其內容,我們導入rmi包。然后,我們創建一個擴展了Java.rmi中遠程接口的接口。所有的遠程對象必須擴展該遠程接口,我們將該遠程接口稱為AddServer。在該遠程對象中,有一個名字為AddNumbers的方法,客戶端可以調用這一方法。我們必須記住的是,所有的遠程方法都需要啟動RemoteException方法,有錯誤發生時就會調用該方法。

            下面我們開始編寫遠程對象的實現。這是一個實現遠程對象并包含有所有方法代碼的類,將下面的代碼保存為名字為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;
          }
          }

            首先,我們導入rmi包,然后創建一個擴展UnicastRemoteObject和實現創建的遠程對象的類;其次,我們可以為類創建一個缺省的構建器。我們還了解了AddNumbers方法的代碼,它啟動RemoteException。這樣我們就覆蓋了創建的遠程對象中的方法。AddNumbers方法的代碼非常好理解,它接受2個整型參數,然后相加并返回它們的和。

            至此,我們已經有了二個Java文件:遠程對象和遠程對象的實現。下面我們將使用Javac命令編譯這二個文件:

            編譯遠程對象:

          C:\jdk\bin\Javac workingdir\AddServer.Java

            編譯遠程對象實現:

          C:\jdk\bin\Javac workingdir\AddServerImpl.Java

            這樣,就會達到二個Java文件和二個類文件,下面我們將創建stub和skeleton。為了創建stub和skeleton文件,我們必須使用rmic編譯器編譯遠程對象實現文件。

            用Rmic編譯遠程對象實現文件:

          C:\jdk\bin\rmic workingdir\AddServerImpl.Java

            然后,我們就會發現多了2個新建的類文件,它們分別是AddServerImpl_Stub.class 和AddServerImpl_Skel.class 。

            The Coding (Contd.)

            我們已經編譯了所有的源代碼,下面我們來創建客戶端和服務器端,將下面的代碼保存為名字為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);
          }
          }

            首先,我們導入Java.rmi包和Java.net包。另外,我們還使用throws從句捕獲任何異常。我們從對象中得出遠程對象實現,使用rebind方法將字符串addnumbers與該對象綁定。下面的例子顯示了綁定的含義:
          從現在開始,無論何時客戶端要調用遠程對象,使用字符串addnumbers就可以實現。rebind方法有二個參數:第一個參數是字符串變量,第二個參數是遠程對象實現類的對象。

            下面我們來創建客戶端,將下面的代碼保存為名字為RmiClient.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);
          }
          }

            首先,我們導入Java.rmi包和Java.net包,并使用throws從句捕獲所有必要的異常。然后通過利用Naming類中的靜態lookup方法從遠程對象中得到一個對象。(這也是我們無需從Naming類中得到一個對象并調用它。而只使用類名字的原因。)

            lookup方法接受遠程對象的完整的URL名字,該URL由完整的機器IP地址以及與對象綁定的字符串(也誻對象的綁定名)組成。在調用遠程對象時,我們使用了RMI協議。lookup方法向我們返回一個對象,在能夠使用它前,我們必須將它的數據類型轉換為與遠程對象的數據類型一致。

          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。RMI Registry存儲有所有綁定的數據,沒有它,RMI就不能正常地運行!

            啟動Rmi Registry服務器:

          C:\jdk\bin\start rmiregistry

            我們會注意到,這時會出現一個空白的DOS提示符窗口,這表明Rmi Registry服務器在運行,注意不要關閉該窗口。然后,我們首先在一個DOS提示符窗口中運行Rmi服務器,然后在另一個DOS提示符窗口中運行Rmi客戶端。

            啟動RMI服務器:

          C:\jdk\bin\Java workingdir\RmiServer

            啟動RMI客戶端:

          C:\jdk\bin\Java workingdir\RmiClient

            如果一切正常,我們應該能夠得到15這個輸出。我們向AddNumbers方法輸入10和5二個數字,該方法將這二者加起來,并將其和15返回給我們。如果得到了15這個輸出,說明我們已經成功地執行了一個遠程方法。當然,在這里,我們并沒有執行真正意義上的遠程方法,因為我們的計算機既是服務器,又是客戶機。如果有計算機網絡,我們就可以方便地進行執行遠程方法的試驗了。

          posted on 2006-04-14 09:17 小小程序程序員混口飯吃 閱讀(1814) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 那坡县| 龙州县| 合水县| 奉贤区| 汽车| 鄯善县| 门头沟区| 静宁县| 科尔| 屏东市| 平乡县| 永昌县| 龙陵县| 南召县| 诸暨市| 新河县| 晋宁县| 泰和县| 依安县| 沙田区| 平邑县| 扎赉特旗| 丰宁| 高邮市| 西林县| 山西省| 开远市| 新巴尔虎右旗| 龙江县| 合阳县| 乐亭县| 桦南县| 丹江口市| 望谟县| 乐至县| 苍溪县| 剑河县| 万州区| 丹江口市| 大丰市| 大安市|