java rmi 入门实例

(2009-06-16 16:07:55)

转载

标签:

java

rmi

杂谈

分类: java-基础
 java rmi即java远程接口调用,实现了2台虚拟机之间的程序调用,这样,网络上的任何两台计算机就可以相互调用对方的程序(如果允许)。

  好了,下面就以经典的 Hello world作为例子讲解。开发rmi的步骤如下。
1、编写远程接口,远程接口实现类
2、编译
3、生成接口实现类存根
4、在服务器端启动rmiregistry命令
5、在服务端注册发布远程对象
6、在客户端获取远程对象
实例:
以下远程接口类为HelloRemote,实现类为HelloImpl,服务器端的发布类为RMIServer,客户端的调用类为RMIClient,为简单考虑,服务器和客户端均在同一台机器(所谓服务器和客户机,是两者运行在2个虚拟机进程下)。
一、编写类
1、远程接口类,需基础java.rmi.Remote接口,且方法抛出RMIException
public interface HelloRemote extends Remote{
public void sayHello() throws RemoteException;   
}

2、远程接口实现类,需继承UnicastRemoteObject
public class HelloImpl extends UnicastRemoteObject  implements HelloRemote{
public HelloImpl() throws RemoteException {
super();
}
public void sayHello() throws RemoteException {
System.out.println("Hello World!");
}
}
3、服务端类
服务端类用于发布远程对象
public class RMIServer {
public static void main(String[] args) throws RemoteException, MalformedURLException {
HelloRemote hello=new HelloImpl();
Naming.rebind("hello", hello);
}
}

4、客户端类
public class RMIClient {
public static void main(String args[]) throws MalformedURLException, RemoteException, NotBoundException{
                           System.setSecurityManager(new   RMISecurityManager());//如果服务器和客户端不再同一台机器要加这行
HelloRemote hello=(HelloRemote) Naming.lookup("hello");
  hello.sayHello();
}
}

远程接口类需同时在服务端和客户端存在
二、编译(注意以上类都没有包,这里主要是简化操作考虑)
客户端文件夹在 E:/client(简称client),服务端在E:/server(简称server)
分别编译以上4个文件。然后将Hello.class分别放到client和server下,将Client.class放到client下,Server.class放到server下,HelloImpl.class文件放到server文件夹下
三、生成存根和骨架
进入server文件夹在命令行下输入命令 rmic HelloImpl,将生成一个HelloImpl_Stub.class文件
将此文件复制到client目录下(server与client均该文件)
四、运行注册程序
在命令行中进入server文件夹 输入命令 rmiregistry,用于启动注册,在此前需设置classpath为E:/server,输入rmiregistry命令后将在server文件夹下生成一个
五、运行服务类
java Server
六、运行客户类
java Client
你将看到执行成功。
当你执行不顺利时,请看看下面:
1、最终执行时要3个命令行窗口,一个运行rmiregistry,一个运行Server,一个运行Clinet,先执行rmiregistry命令,接着执行java Server,最后执行java Client
2、客户端和服务端均要有存根(HelloImpl_Stub.class)和远程接口的定义,且包名要一致。
3、当运行服务器时,提示找不到HelloImpl_Stub,那是你没指定类路径,那请你在执行rmiregistry前设置classpath
4、出现AscessableException访问非法时,需要修改此略文件,在jre/security目录下的java.policy文件中(如果你有多个jre,你无法确定是哪个。那就全部修改吧),在该文件中添加如下内容
grant {
         permission java.net.SocketPermission "*:1024-65535",
              "connect,accept";
         permission java.net.SocketPermission "*:80","connect";
      };
5、指定端口,默认是1099,可以在运行rmiregistry时指定 如 rmiregistry 1098,也可以在Server.java中指定,如Registry.createRegistry(1088).
 
6、绑定地址的设置
简单形式Naming.bind("hello"),本机地址时才可以
完全形式Naming.bind("rmi://117.45.220.11:1099/RMI_Hello")

转载于:https://www.cnblogs.com/wshsdlau/p/3532071.html

java rmi 入门实例相关推荐

  1. Eclipse Java RMI 入门

    Eclipse Java RMI 入门 关键字: rmi     最近在网上看了一些关于RMI的相关内容,可是在写一个例子的时候总是不成功.经过一段时间的改进.总算是成功运行.在这在里,把我的例子大家 ...

  2. Java RMI 入门

    Java RMI 入门 如何通信 实战 完整代码   Java RMI 指 JDK 内置的关于实现远程方法调用(Remote Method Invocation)的 API.这些 API 位于包 ja ...

  3. Java Socket入门实例

    基于测试驱动的Socket入门实例(代码的具体功能可以看我的程序中的注释,不理解的可以短信我) 先看Server的代码: package socketStudy; import java.io.Buf ...

  4. java rmi (1)Java RMI入门

    RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的 ...

  5. Java UDP 入门实例

    读写分开,实现全双工通信 Peer1类,监听5000端口,接收传过来的 消息并显示在控制台中.localhost的5001端 口持续发送"world" 消息. Peer2类, 监听 ...

  6. axis2 webservice入门学识(JS,Java,PHP调用实例源码)

    来源:http://www.myexception.cn/web/952419.html axis2 webservice入门知识(JS,Java,PHP调用实例源码) 背景简介 最近接触到一个银行接 ...

  7. Java 图形化界面编程(Swing)入门实例

    本文目录 入门实例 先整一个图形化界面出来 常用布局 流式布局 网格布局 边界布局 边界布局 四个入门实例(附截图) 一个小demo(单词计数) 一个较为完整的demo Java (Swing)文件版 ...

  8. java rmi 例子_RMI最简单的一个实例

    RMI最简单的一个实例 2008年06月21日 星期六 下午 07:30 1.    RMI最简单的一个实例,思路是你在服务器端创建一个方法addData(),该方法实现两个整数的相加,然从客户端远程 ...

  9. Java编程入门与应用 P210 例8-8——演示创建实例的方法

    Java编程入门与应用 P210 例8-8--演示创建实例的方法 显式转换和隐式转换的概念 /*** Java编程入门与应用 P210 例8-8--演示创建实例的方法** 显式转换和隐式转换的概念*/ ...

最新文章

  1. bug诞生记——不定长参数隐藏的类型问题
  2. sql insert 自动增量值_SQL中有关DQL、DML、DDL、DCL的概念与区别
  3. Example002定时打开窗口
  4. java 反射 ppt_Java反射的基本使用
  5. oracle各版本手动升级任我行-升级矩阵
  6. css为什么要清除浮动
  7. 200多个新颖独特的域名展示
  8. 同学聚会 主持词_我主持freeCodeCamp聚会的三年来的成功和失败
  9. Win10之选择文件右击时卡死问题(转圈圈)
  10. 用户视图切换为Linux视图,视图_ITPUB博客
  11. 设计一个移动应用的本地缓存机制(转)
  12. 响应式编程、反应式编程的简易教程-超赞演讲
  13. 华三路由交换配置命令_华三华为交换机路由器配置常用命令
  14. [HNOI2004]宠物收养所(简单理解,用set写的)
  15. 【SAP ABAP学习资料】(财务相关)BTE增强查找,新增
  16. 无线移动通信技术快速发展历程和趋向
  17. java做橡皮擦效果_顶风作案,html5 canvas实现橡皮擦功能,擦了就知道有惊喜了...
  18. Facebook将对视频进行人物识别及身份标注
  19. 解决eclipse: Resource is out of sync with the file system 报错问题
  20. ZOJ 142 - The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple - D

热门文章

  1. Angular 根据指定条件动态决定是否显示自定义的popup hover Component
  2. 如何定制化SAP Spartacus的购物车图标
  3. LoadRunner常见问题分析
  4. 如何定义一个类对象并用next()的方法使用_深入理解-可迭代对象、迭代器(20个为什么)...
  5. 2d与2.5d坐标转换_ArcGIS中坐标系统定义与投影转换(包含定义三参七参)
  6. Linux系统的操作命令
  7. python中exit的作用_python __enter__ 与 __exit__的作用,以及与 with 语句的关系
  8. html不继承父级背景色,javascript – 如何获取从父元素继承的计算背景颜色样式...
  9. jmeter一个线程组多个请求_JMeter接口测试以及完善教程
  10. 华为重磅反击,鸿蒙来了!