`
fengshujuan
  • 浏览: 160187 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

RMI最简单的一个实例

阅读更多

[转载:http://hi.baidu.com/sham%5Frock/blog/item/2beb8a4cd01d5ffad72afc4e.html]

 

1.    RMI最简单的一个实例,思路是你在服务器端创建一个方法addData(),该方法实现两个整数的相加,然从客户端远程调用这个方法实现相加功能

2.    我们一步一步来实现,首先定义远程接口-----远程接口类

import java.rmi.*;

import java.rmi.server.*;

 

public interface AddServer extends Remote

 

{

       public int addData(int a,int b)throws RemoteException;

}

 

2.         定义和实现服务器中远程方法-----服务器类

import java.rmi.*;

import java.rmi.server.*;

//注意要扩展UnicastRemoteObject

 

public class AddServerImpl extends UnicastRemoteObject implements AddServer

 

{

       public AddServerImpl()throws RemoteException

       {

              super();

       }

       public int addData(int a,int b)throws RemoteException

       {

              return a+b;

       }

       public static void main(String s[])

       {

              try

              {

                     //创建该远程对象

                     AddServerImpl instance=new AddServerImpl();

                     //注册该远程对象

Naming.rebind("add",instance);

                     System.out.println("Server Registered");

              }

              catch(Exception e){System.out.println(e);}

       }

}

 

3.         定义与实现客户-----客户类

import java.io.*;

import java.rmi.*;

 

public class AddClient

{

       public AddClient()

       {

              try

              {

                     BufferedReader input=new BufferedReader(new InputStreamReader(System.in));

                     System.out.println("Please enter first number:");

                     System.out.flush();

                     String s=input.readLine();

                     int num1=Integer.parseInt(s);

                     System.out.println("Please enter second number:");

                     System.out.flush();

                     s=input.readLine();

                     int num2=Integer.parseInt(s);                   

 

                     AddServer addserver=(AddServer)Naming.lookup("rmi://127.0.0.1/add");                  

 

                     int i=addserver.addData(num1,num2);

 

                     System.out.print("Result is:"+i);

              }catch(Exception e){System.out.println(e);}

       }

       public static void main(String s[])

       {

              new AddClient();

       }

}

4.         编译javac *.java

5.         生成StubSkeleton

在命令提示符下:rmic  AddServerImpl

这时你会发现在文件夹中多了两个文件AddServerImpl_Skel.classAddServerImpl_Stub.class

6.         创建安全策略

在命令提示符下:policytool

点击Add Policy Entry按钮,点击Add Permission按钮,

Permission列表框中选取:AllPermission            点击ok              点击Done按钮

File菜单总选择Save as,打入文件名.java.policy,接着保存在你那个登录用户名的文件夹下面

7.         启动RMI远程注册表

在命令提示符下:start  rmiregistry

8.         启动服务器

在命令提示符下:java  AddServerImpl

9.         启动客户

在命令提示符下:java  AddClient

10.   如果你是在自己机器上调试的话,那么到第九步就可以了,如果你在两台机器上调试的话,需要改一下AddClient代码中的IP地址,并且把AddClient.classAddServer.classAddServerImpl_Stub.class放到你打算作为客户端的那台机器上去,注意其它文件不要放,否则你就等于把服务端代码都告诉别人了。

分享到:
评论

相关推荐

    最最简单的RMI实例

    简简单单的RMI实便,最基本的RMI原理实现

    java 面试题 总结

    然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中...

    超级有影响力霸气的Java面试题大全文档

     SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。...

    carmine:使用 HTTP(S) 的轻量级 Java RMI 替代方案

    不依赖于外部库——只有一个小JAR文件 Java SE 6+兼容 概述 Carmine被设计为尽可能简单的Java-to-Java远程方法调用,不仅是为了使用方便(远程方法的调用与本地方法完全相同,除了对象实例化),而且为了方便实现...

    JAVA面试题最全集

    写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc。 3.数据类型之间的转换 如何将数值型字符转换为数字(Integer,Double) 如何将数字...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例 spring jar 包详解spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下...

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    内容提要:简单介绍了监听器是 Quartz 框架的一个扩展点,实现一个监听器的基本步骤,最后说明了全局监听器和非全局监听器的区别。 第七章. 实现 Quartz 监听器 (第二部分) 内容提要:JobListener (Job 监听器) 的...

    在Java中应用设计模式-FactoryMethod

    在设计模式中,FactoryMethod也是比较简单的一个,但应用非常广泛,EJB,RMI,COM,CORBA,Swing中都可以看到此模式的影子,它是最重要的模式之一.在很多地方我们都会看到xxxFactory这样命名的类,那么,什么是FactoryMethod,...

    二十三种设计模式【PDF版】

    保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    Flex Builder 提供了一个可视化的编辑器,通过简单的拖拽,一个毫无经验的开发人员也能够设计出漂亮的布局。如果熟悉一点 XML 的知识,编辑 MXML 也并非难事。我们设计的 Employee Management 系统界面的最终效果...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    Flex Builder 提供了一个可视化的编辑器,通过简单的拖拽,一个毫无经验的开发人员也能够设计出漂亮的布局。如果熟悉一点 XML 的知识,编辑 MXML 也并非难事。我们设计的 Employee Management 系统界面的最终效果...

    Java并发编程(学习笔记).xmind

    (2)建模简单:通过使用线程可以讲复杂并且异步的工作流进一步分解成一组简单并且同步的工作流,每个工作流在一个单独的线程中运行,并在特定的同步位置交互 (3)简化异步事件的处理:服务器应用程序在接受...

    Java项目开发与毕业设计指导

    Ch10:一个简单的编译器实现 安装JDK、配置环境变量,启动Eclipse并导入ch10项目,运行主类calculator.Calculator即可。 Ch11:基于RMI分布计算实例 安装JDK、配置环境变量,编译java源文件(可以用eclipse自动...

    水木清华站∶Java版精华区 含jsp及js等集合.chm

    [目录]一个JDBC问题 6. [目录]Java安全性问题 1. [目录]数字化签名 1. [目录]JAVAKEY问题 7. [目录]Java与Linux 8. [目录]Java其他问题 1. [目录]播放.au文件的问题 2. [目录]...

    RED HAT LINUX 6大全

    14.2 运行一个简单的Samba设置 243 14.2.1 使用Linux客户测试 243 14.2.2 使用Windows客户测试 244 14.3 配置Samba 245 14.3.1 [global]段 245 14.3.2 [homes]段 246 14.3.3 [printers]段 247 14.3.4 Samba打印机...

    Spring API

    9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. 选择一种...

    Spring中文帮助文档

    9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. 选择一...

Global site tag (gtag.js) - Google Analytics