Java RMI的簡(jiǎn)單例子

          Posted on 2007-05-26 09:41 E.ven 閱讀(28191) 評(píng)論(6)  編輯  收藏
           

          現(xiàn)在雖然我們很少用到RMI進(jìn)行編程,但是做為Java一個(gè)最早的分布式解決方案,我們還是有了解的必要,從例子開始吧(雖然是幾年前的了)!

          遠(yuǎn)程接口RmiHelloRemoteIntfc .java

          import java.rmi.*;

          public interface RmiHelloRemoteIntfc extends Remote
          {
             String helloRemoteObj(String client) throws RemoteException;
          }

          遠(yuǎn)程接口的實(shí)現(xiàn)類RmiHelloRemoteObj.java

          import java.rmi.server.*;
          import java.rmi.*;

          public class RmiHelloRemoteObj extends UnicastRemoteObject implements RmiHelloRemoteIntfc
          {

            public RmiHelloRemoteObj() throws RemoteException
            {
              super();
            }

            public String helloRemoteObj(String client) throws RemoteException
            {
               return "Hello World"+client;
            }

          }

          服務(wù)器類RmiHelloServer.java

          import java.io.*;
          import java.rmi.*;
          import java.rmi.server.*;
          import sun.applet.*;
          import java.rmi.registry.LocateRegistry;

          public class RmiHelloServer
          {

            public RmiHelloServer()
            {
            }
            public static void main(String[] args)
            {
              //創(chuàng)建并安裝安全管理器
              if(System.getSecurityManager()==null)
              {
                 System.setSecurityManager(new RMISecurityManager());
              }

              try{
                   //創(chuàng)建遠(yuǎn)程對(duì)象
                   RmiHelloRemoteObj ttt=new RmiHelloRemoteObj();
                   //啟動(dòng)注冊(cè)表
                   LocateRegistry.createRegistry(2222);
                   //獎(jiǎng)名稱綁定到對(duì)象
                   Naming.rebind("http://Fangm:2222/helloObj",ttt);

                   System.out.println("RMI服務(wù)器正在運(yùn)行。。。。。。");
                }
                catch(Exception e)
                {
                   e.printStackTrace();
                }


            }
          }

          服務(wù)器端的權(quán)限文件RmiHelloServer.policy

          grant codeBase
          "file:/e:/download/rmitest/"
          {
           permission java.net.SocketPermission
                "*:1000-9999","accept,connect,listen,resolve";
          };

           

          現(xiàn)在就看看Client端是如何連接服務(wù)器和進(jìn)行遠(yuǎn)程方法的調(diào)用的吧

          import java.rmi.*;
          import java.rmi.server.*;

          public class RmiHelloClient
          {

            public RmiHelloClient()
            {
            }
            public static void main(String[] args)
            {
              //創(chuàng)建并安裝安全管理器
              if(System.getSecurityManager()==null)
              {
                 System.setSecurityManager(new RMISecurityManager());
              }

              try{
                    RmiHelloRemoteIntfc c1=(RmiHelloRemoteIntfc)Naming.lookup("rmi://Fangm:2222/helloObj");
                    System.out.println(c1.helloRemoteObj("Everyone"));
              }
              catch(Exception e)
              {
                 e.printStackTrace();
              }
              System.exit(0);

           

            }
          }

          Client端的權(quán)限文件RmiHelloClient.policy

          grant codeBase
          "file:/e:/download/rmitest/"
          {
            permission java.net.SocketPermission
                "*:1000-9999","accept,connect,listen,resolve";
          };

          好了,一個(gè)最簡(jiǎn)單的RMI例子就安無(wú)了,對(duì)了還少了最重要的一步,那就是編譯和運(yùn)行呢?我們就來(lái)了個(gè)Bat或Cmd的批處理來(lái)進(jìn)行吧,

          看看RmiHello.bat吧

          javac RmiHelloRemoteIntfc.java

          javac RmiHelloRemoteObj.java

          rmic RmiHelloRemoteObj

          javac RmiHelloServer.java

          javac RmiHelloClient.java

          echo 在另一個(gè)窗口啟動(dòng)服務(wù)器,請(qǐng)稍后。。。
          start java  -Djava.security.policy=RmiHelloServer.policy RmiHelloServer

          echo 運(yùn)行客戶程序。。。
          java -Djava.security.policy=RmiHelloClient.policy RmiHelloClient

          這個(gè)文件很簡(jiǎn)單吧!包你一試就通,雖然簡(jiǎn)單,不過對(duì)于初學(xué)者來(lái)說(shuō),還是很不錯(cuò)的哦!

          Feedback

          # re: Java RMI的簡(jiǎn)單例子  回復(fù)  更多評(píng)論   

          2008-06-12 08:18 by
          那現(xiàn)在用什么啊

          # re: Java RMI的簡(jiǎn)單例子  回復(fù)  更多評(píng)論   

          2008-07-31 15:40 by 嘉寶
          是啊
          那現(xiàn)在用什么技術(shù)實(shí)現(xiàn)分布式

          # re: Java RMI的簡(jiǎn)單例子[未登錄]  回復(fù)  更多評(píng)論   

          2008-09-12 14:46 by apple0668
          rmi結(jié)合spring提供接口,用起來(lái)更加方便了

          # re: Java RMI的簡(jiǎn)單例子  回復(fù)  更多評(píng)論   

          2009-06-22 13:28 by 真暈啊
          #&%(*&!@(#^!@(*#(!@#
          給一個(gè)錯(cuò)誤的例子來(lái)誤導(dǎo)我!
          注冊(cè)表的端口號(hào)跟主機(jī)端口號(hào)對(duì)不上的,主機(jī)地址又不知道是什么東東來(lái)的

          # re: Java RMI的簡(jiǎn)單例子[未登錄]  回復(fù)  更多評(píng)論   

          2010-01-13 15:36 by haha
          @真暈啊
          不是別人誤導(dǎo)你 而是你自己學(xué)而不精阿。艾

          # re: Java RMI的簡(jiǎn)單例子  回復(fù)  更多評(píng)論   

          2012-08-23 19:27 by 李鋒

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          posts - 27, comments - 15, trackbacks - 0, articles - 1

          Copyright © E.ven

          主站蜘蛛池模板: 新巴尔虎右旗| 贵港市| 山西省| 连云港市| 舒城县| 昌吉市| 始兴县| 呼和浩特市| 福贡县| 丰镇市| 鄂托克旗| 竹溪县| 湘潭市| 望都县| 交口县| 建湖县| 玉山县| 宜黄县| 九江县| 呼和浩特市| 扎兰屯市| SHOW| 喜德县| 武穴市| 南昌县| 和林格尔县| 社会| 玉树县| 沂水县| 中西区| 南昌县| 壤塘县| 吴江市| 海口市| 四平市| 垦利县| 元阳县| 岗巴县| 兴海县| 宁河县| 鄂尔多斯市|