Java RMI的簡單例子

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

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

          遠程接口RmiHelloRemoteIntfc .java

          import java.rmi.*;

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

          遠程接口的實現(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)建遠程對象
                   RmiHelloRemoteObj ttt=new RmiHelloRemoteObj();
                   //啟動注冊表
                   LocateRegistry.createRegistry(2222);
                   //獎名稱綁定到對象
                   Naming.rebind("http://Fangm:2222/helloObj",ttt);

                   System.out.println("RMI服務(wù)器正在運行。。。。。。");
                }
                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ù)器和進行遠程方法的調(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例子就安無了,對了還少了最重要的一步,那就是編譯和運行呢?我們就來了個Bat或Cmd的批處理來進行吧,

          看看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 運行客戶程序。。。
          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ù)實現(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)我!
          注冊表的端口號跟主機端口號對不上的,主機地址又不知道是什么東東來的

          # 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

          主站蜘蛛池模板: 卢氏县| 曲松县| 上饶市| 琼结县| 潞西市| 正阳县| 运城市| 延吉市| 都匀市| 宁武县| 湘阴县| 辽宁省| 信阳市| 会理县| 陇川县| 沅江市| 韶山市| 藁城市| 库伦旗| 奉化市| 南平市| 文安县| 竹溪县| 抚顺市| 黔西县| 安徽省| 乌苏市| 北海市| 蛟河市| 宜君县| 临湘市| 廊坊市| 清远市| 凉山| 达孜县| 青铜峡市| 新野县| 巴马| 乌兰浩特市| 昌平区| 海兴县|