<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-109  評(píng)論-187  文章-25  trackbacks-0

    轉(zhuǎn)自:http://m47121.blogchina.com/2555077.html

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

    編程

      我們將首先編寫遠(yuǎn)程對(duì)象,并將代碼保存為名字為AddServer.Java的文件:

    import Java.rmi.*;

    public interface AddServer extends Remote {

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

    }

      我們來(lái)看看上面的代碼。首先,為了使用其內(nèi)容,我們導(dǎo)入rmi包。然后,我們創(chuàng)建一個(gè)擴(kuò)展了Java.rmi中遠(yuǎn)程接口的接口。所有的遠(yuǎn)程對(duì)象必須擴(kuò)展該遠(yuǎn)程接口,我們將該遠(yuǎn)程接口稱為AddServer。在該遠(yuǎn)程對(duì)象中,有一個(gè)名字為AddNumbers的方法,客戶端可以調(diào)用這一方法。我們必須記住的是,所有的遠(yuǎn)程方法都需要啟動(dòng)RemoteException方法,有錯(cuò)誤發(fā)生時(shí)就會(huì)調(diào)用該方法。

      下面我們開始編寫遠(yuǎn)程對(duì)象的實(shí)現(xiàn)。這是一個(gè)實(shí)現(xiàn)遠(yuǎn)程對(duì)象并包含有所有方法代碼的類,將下面的代碼保存為名字為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;
    }
    }

      首先,我們導(dǎo)入rmi包,然后創(chuàng)建一個(gè)擴(kuò)展UnicastRemoteObject和實(shí)現(xiàn)創(chuàng)建的遠(yuǎn)程對(duì)象的類;其次,我們可以為類創(chuàng)建一個(gè)缺省的構(gòu)建器。我們還了解了AddNumbers方法的代碼,它啟動(dòng)RemoteException。這樣我們就覆蓋了創(chuàng)建的遠(yuǎn)程對(duì)象中的方法。AddNumbers方法的代碼非常好理解,它接受2個(gè)整型參數(shù),然后相加并返回它們的和。

      至此,我們已經(jīng)有了二個(gè)Java文件:遠(yuǎn)程對(duì)象和遠(yuǎn)程對(duì)象的實(shí)現(xiàn)。下面我們將使用Javac命令編譯這二個(gè)文件:

      編譯遠(yuǎn)程對(duì)象:

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

      編譯遠(yuǎn)程對(duì)象實(shí)現(xiàn):

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

      這樣,就會(huì)達(dá)到二個(gè)Java文件和二個(gè)類文件,下面我們將創(chuàng)建stub和skeleton。為了創(chuàng)建stub和skeleton文件,我們必須使用rmic編譯器編譯遠(yuǎn)程對(duì)象實(shí)現(xiàn)文件。

      用Rmic編譯遠(yuǎn)程對(duì)象實(shí)現(xiàn)文件:

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

      然后,我們就會(huì)發(fā)現(xiàn)多了2個(gè)新建的類文件,它們分別是AddServerImpl_Stub.class 和AddServerImpl_Skel.class 。

      The Coding (Contd.)

      我們已經(jīng)編譯了所有的源代碼,下面我們來(lái)創(chuàng)建客戶端和服務(wù)器端,將下面的代碼保存為名字為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);
    }
    }

      首先,我們導(dǎo)入Java.rmi包和Java.net包。另外,我們還使用throws從句捕獲任何異常。我們從對(duì)象中得出遠(yuǎn)程對(duì)象實(shí)現(xiàn),使用rebind方法將字符串a(chǎn)ddnumbers與該對(duì)象綁定。下面的例子顯示了綁定的含義:
    從現(xiàn)在開始,無(wú)論何時(shí)客戶端要調(diào)用遠(yuǎn)程對(duì)象,使用字符串a(chǎn)ddnumbers就可以實(shí)現(xiàn)。rebind方法有二個(gè)參數(shù):第一個(gè)參數(shù)是字符串變量,第二個(gè)參數(shù)是遠(yuǎn)程對(duì)象實(shí)現(xiàn)類的對(duì)象。

      下面我們來(lái)創(chuàng)建客戶端,將下面的代碼保存為名字為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);
    }
    }

      首先,我們導(dǎo)入Java.rmi包和Java.net包,并使用throws從句捕獲所有必要的異常。然后通過(guò)利用Naming類中的靜態(tài)lookup方法從遠(yuǎn)程對(duì)象中得到一個(gè)對(duì)象。(這也是我們無(wú)需從Naming類中得到一個(gè)對(duì)象并調(diào)用它。而只使用類名字的原因。)

      lookup方法接受遠(yuǎn)程對(duì)象的完整的URL名字,該URL由完整的機(jī)器IP地址以及與對(duì)象綁定的字符串(也誻對(duì)象的綁定名)組成。在調(diào)用遠(yuǎn)程對(duì)象時(shí),我們使用了RMI協(xié)議。lookup方法向我們返回一個(gè)對(duì)象,在能夠使用它前,我們必須將它的數(shù)據(jù)類型轉(zhuǎn)換為與遠(yuǎn)程對(duì)象的數(shù)據(jù)類型一致。

    Since we have both our server and client source ready, let's compile them both:

      至此,我們已經(jīng)有了服務(wù)器端和客戶端的源代碼,下面我們來(lái)編譯這二個(gè)源文件:

      編譯遠(yuǎn)程服務(wù)器:

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

      編譯遠(yuǎn)程客戶端:

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

      在對(duì)我們的代碼進(jìn)行測(cè)試前,還必須首先啟動(dòng)RMI Registry。RMI Registry存儲(chǔ)有所有綁定的數(shù)據(jù),沒有它,RMI就不能正常地運(yùn)行!

      啟動(dòng)Rmi Registry服務(wù)器:

    C:\jdk\bin\start rmiregistry

      我們會(huì)注意到,這時(shí)會(huì)出現(xiàn)一個(gè)空白的DOS提示符窗口,這表明Rmi Registry服務(wù)器在運(yùn)行,注意不要關(guān)閉該窗口。然后,我們首先在一個(gè)DOS提示符窗口中運(yùn)行Rmi服務(wù)器,然后在另一個(gè)DOS提示符窗口中運(yùn)行Rmi客戶端。

      啟動(dòng)RMI服務(wù)器:

    C:\jdk\bin\Java workingdir\RmiServer

      啟動(dòng)RMI客戶端:

    C:\jdk\bin\Java workingdir\RmiClient

      如果一切正常,我們應(yīng)該能夠得到15這個(gè)輸出。我們向AddNumbers方法輸入10和5二個(gè)數(shù)字,該方法將這二者加起來(lái),并將其和15返回給我們。如果得到了15這個(gè)輸出,說(shuō)明我們已經(jīng)成功地執(zhí)行了一個(gè)遠(yuǎn)程方法。當(dāng)然,在這里,我們并沒有執(zhí)行真正意義上的遠(yuǎn)程方法,因?yàn)槲覀兊挠?jì)算機(jī)既是服務(wù)器,又是客戶機(jī)。如果有計(jì)算機(jī)網(wǎng)絡(luò),我們就可以方便地進(jìn)行執(zhí)行遠(yuǎn)程方法的試驗(yàn)了。

    posted on 2006-04-14 09:17 小小程序程序員混口飯吃 閱讀(1813) 評(píng)論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 色拍自拍亚洲综合图区| 亚洲精品免费网站| 1区2区3区产品乱码免费| 国产成人亚洲综合一区| 亚洲人成网站18禁止一区 | 黄色网址免费在线| 亚洲AV无码一区东京热| 日韩在线视频免费看| 免费人成激情视频在线观看冫| 91午夜精品亚洲一区二区三区| 国产91久久久久久久免费| 中国在线观看免费的www| 亚洲自国产拍揄拍| 久久综合亚洲色HEZYO国产| 国产精品久久久久久久久免费| 西西人体大胆免费视频| 亚洲欧洲另类春色校园小说| 免费国产高清视频| 四虎1515hh永久久免费| 一级做a爰片性色毛片免费网站| 4480yy私人影院亚洲| 亚洲综合最新无码专区| 久九九精品免费视频| 国产又黄又爽胸又大免费视频 | 亚洲色偷偷色噜噜狠狠99| 亚洲精品乱码久久久久久蜜桃不卡| 青青草a免费线观a| 任你躁在线精品免费| 国产精品亚洲专区一区| 亚洲日本在线观看网址| 国产aⅴ无码专区亚洲av麻豆 | 日韩亚洲欧洲在线com91tv| 国产成人啪精品视频免费网| 毛片免费全部播放无码| 巨胸喷奶水视频www免费视频| 亚洲精品无码一区二区| 亚洲男人天堂2017| 亚洲精品成人片在线观看精品字幕 | 国产美女精品久久久久久久免费 | 又大又黄又粗又爽的免费视频| 精品女同一区二区三区免费站|