Java RMI的簡單例子

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

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

          遠(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)程對象
                   RmiHelloRemoteObj ttt=new RmiHelloRemoteObj();
                   //啟動注冊表
                   LocateRegistry.createRegistry(2222);
                   //獎名稱綁定到對象
                   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";
          };

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

          看看RmiHello.bat吧

          javac RmiHelloRemoteIntfc.java

          javac RmiHelloRemoteObj.java

          rmic RmiHelloRemoteObj

          javac RmiHelloServer.java

          javac RmiHelloClient.java

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

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

          這個文件很簡單吧!包你一試就通,雖然簡單,不過對于初學(xué)者來說,還是很不錯的哦!

          Feedback

          # re: Java RMI的簡單例子  回復(fù)  更多評論   

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

          # re: Java RMI的簡單例子  回復(fù)  更多評論   

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

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

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

          # re: Java RMI的簡單例子  回復(fù)  更多評論   

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

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

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

          # re: Java RMI的簡單例子  回復(fù)  更多評論   

          2012-08-23 19:27 by 李鋒

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


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

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

          Copyright © E.ven

          主站蜘蛛池模板: 桃园市| 迁西县| 苏尼特左旗| 于都县| 汉沽区| 揭西县| 建瓯市| 常德市| 鹤壁市| 海盐县| 大石桥市| 上林县| 正定县| 军事| 巴东县| 焦作市| 岫岩| 永德县| 四平市| 澄江县| 铜陵市| 罗定市| 克拉玛依市| 永定县| 个旧市| 平山县| 横峰县| 治县。| 凤冈县| 榆社县| 建宁县| 望城县| 炉霍县| 丁青县| 岫岩| 巴南区| 那坡县| 邹城市| 安图县| 民勤县| 通江县|