zoukankan      html  css  js  c++  java
  • RMI编程小例子

    现在虽然我们很少用到RMI进行编程,但是做为Java一个最早的分布式解决方案,我们还是有了解的必要,从例子开始吧(虽然是几年前的了)!

    远程接口RmiHelloRemoteIntfc .java

    import java.rmi.*;

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

    远程接口的实现类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;
      }

    }

    服务器类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)
      {
        //创建并安装安全管理器
        if(System.getSecurityManager()==null)
        {
           System.setSecurityManager(new RMISecurityManager());
        }

        try{
             //创建远程对象
             RmiHelloRemoteObj ttt=new RmiHelloRemoteObj();
             //启动注册表
             LocateRegistry.createRegistry(2222);
             //奖名称绑定到对象
             Naming.rebind("//Fangm:2222/helloObj",ttt);

             System.out.println("RMI服务器正在运行。。。。。。");
          }
          catch(Exception e)
          {
             e.printStackTrace();
          }


      }
    }

    服务器端的权限文件RmiHelloServer.policy

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

    现在就看看Client端是如何连接服务器和进行远程方法的调用的吧

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

    public class RmiHelloClient
    {

      public RmiHelloClient()
      {
      }
      public static void main(String[] args)
      {
        //创建并安装安全管理器
        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端的权限文件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 在另一个窗口启动服务器,请稍后。。。
    start java  -Djava.security.policy=RmiHelloServer.policy RmiHelloServer

    echo 运行客户程序。。。
    java -Djava.security.policy=RmiHelloClient.policy RmiHelloClient

    这个文件很简单吧!包你一试就通,虽然简单,不过对于初学者来说,还是很不错的哦!

    原文转自:http://blog.csdn.net/njchenyi/article/details/467963

  • 相关阅读:
    HttpServlet RequestDispatcher sendredirect和forward
    java中判断字符串是否为数字的方法的几种方法
    apk 解包 打包
    js cookie
    js中的this关键字
    Myeclipse 添加Android开发工具
    List<T> List<?> 区别用法
    mysql 命令
    BZOJ 2281 Luogu P2490 [SDOI2011]黑白棋 (博弈论、DP计数)
    【学习笔记】求矩阵的特征多项式
  • 原文地址:https://www.cnblogs.com/jston/p/2916897.html
Copyright © 2011-2022 走看看