注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

RMI编程步骤  

2009-03-16 14:44:03|  分类: rmi |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

《JAVA编程思想》里面的例子不错,不过将服务器端的程序与JAVA实现类写在一起,显得很混乱!在网上看到一个更好的例子是将实现类和服务器程序拆开,这样更好!

客户端程序+接口类+实现类的Stub放在客户端,就能够顺利执行客户端程序!

1、编写接口程序

//Calculator.java

//define the interface

import java.rmi.Remote;

public interface Calculator extends Remote

{

    public long add(long a, long b)

        throws java.rmi.RemoteException;

    public long sub(long a, long b)

        throws java.rmi.RemoteException;

    public long mul(long a, long b)

        throws java.rmi.RemoteException;

    public long div(long a, long b)

        throws java.rmi.RemoteException;

}

2、实现接口程序

//CalculatorImpl.java

//Implementation

import java.rmi.server.UnicastRemoteObject;

public class CalculatorImpl extends UnicastRemoteObject implements Calculator

{

    // 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常

    public CalculatorImpl()

        throws java.rmi.RemoteException {

        super();

    }

    public long add(long a, long b)

        throws java.rmi.RemoteException {

        return a + b;

    }

    public long sub(long a, long b)

        throws java.rmi.RemoteException {

        return a - b;

    }

    public long mul(long a, long b)

        throws java.rmi.RemoteException {

        return a * b;

    }

    public long div(long a, long b)

        throws java.rmi.RemoteException {

        return a / b;

    }

}

3、编写服务器程序

//CalculatorServer.java

import java.rmi.Naming;

public class CalculatorServer {

 public CalculatorServer() {

 try {

  //创建远程对象
        Calculator c = new CalculatorImpl();
        //启动注册表
        Registry registry =  LocateRegistry.createRegistry(1099);
        //将名称绑定到对象      
        Naming.rebind("//localhost:1099/CalculatorService", c);
      } catch (Exception e) {
        System.out.println("Trouble: " + e);
      }
      System.out.println("start");

     } catch (Exception e) {

       System.out.println("Trouble: " + e);

     }

   }

   public static void main(String args[]) {

     new CalculatorServer();

   }

}

4、编译

5、rmic -keep CalculatorImpl

生成CalculatorImpl_Stub.class,-keep参数表明保留Stub的.java文件。

6、编写policy.txt

grant {

permission java.security.AllPermission "", "";

permission java.net.SocketPermission "*:1024-65535", "connect,accept";

permission java.io.FilePermission "e: estpractise-", "read";

};

7、start rmiregistry 端口号

端口号默认为1099

8、执行

java classpath . -Djava.security.policy=policy.txt CalculatorServer

9、编写客户端程序

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.net.MalformedURLException;

import java.rmi.NotBoundException;

public class CalculatorClient {

    public static void main(String[] args) {

        try {

              Calculator c = (Calculator)Naming.lookup("rmi://localhost:1099/CalculatorService");

            System.out.println( c.sub(4, 3) );

            System.out.println( c.add(4, 5) );

            System.out.println( c.mul(3, 6) );

            System.out.println( c.div(9, 3) );

        }

        catch (MalformedURLException murle) {

            System.out.println();

            System.out.println(

              "MalformedURLException");

            System.out.println(murle);

        }

        catch (RemoteException re) {

            System.out.println();

            System.out.println(

                        "RemoteException");

            System.out.println(re);

        }

        catch (NotBoundException nbe) {

            System.out.println();

            System.out.println(

                       "NotBoundException");

            System.out.println(nbe);

        }

        catch (

            java.lang.ArithmeticException

                                      ae) {

            System.out.println();

            System.out.println(

             "java.lang.ArithmeticException");

            System.out.println(ae);

        }

    }

}

10、执行

java -classpath . -Djava.security.policy=policy.txt CalculatorClient

  评论这张
 
阅读(796)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017