个人理解:

RMI就是RMI 是不是就是向客户端隐藏了实现类。

但是客户端要有与server端同样的接口。

接口:

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2008-8-7 21:50:02

* 定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常

*/

public interface IHello extends Remote {

/**

* 简单的返回“Hello World!"字样

* @return 返回“Hello World!"字样

* @throws java.rmi.RemoteException

*/

public String helloWorld() throws RemoteException;

/**

* 一个简单的业务方法,根据传入的人名返回相应的问候语

* @param someBodyName  人名

* @return 返回相应的问候语

* @throws java.rmi.RemoteException

*/

public String sayHelloToSomeBody(String someBodyName) throws RemoteException;

}

客户端、服务器端都要有。

实现类:

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2008-8-7 21:56:47

* 远程的接口的实现

*/

public class HelloImpl extends UnicastRemoteObject implements IHello {

/**

* 因为UnicastRemoteObject的构造方法抛出了RemoteException异常,因此这里默认的构造方法必须写,必须声明抛出RemoteException异常

*

* @throws RemoteException

*/

public HelloImpl() throws RemoteException {

}

/**

* 简单的返回“Hello World!"字样

*

* @return 返回“Hello World!"字样

* @throws java.rmi.RemoteException

*/

public String helloWorld() throws RemoteException {

return "Hello World!";

}

/**

* 一个简单的业务方法,根据传入的人名返回相应的问候语

*

* @param someBodyName 人名

* @return 返回相应的问候语

* @throws java.rmi.RemoteException

*/

public String sayHelloToSomeBody(String someBodyName) throws RemoteException {

return "你好," + someBodyName + "!";

}

}

只要在服务器端有。

服务器的服务程序:

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2008-8-7 22:03:35

* 创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中。

*/

public class HelloServer {

public static void main(String args[]) {

try {

//创建一个远程对象

IHello rhello = new HelloImpl();

//本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上

LocateRegistry.createRegistry(8888);

//把远程对象注册到RMI注册服务器上,并命名为RHello

//绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)

Naming.bind("rmi://localhost:8888/RHello",rhello);

//            Naming.bind("//localhost:8888/RHello",rhello);

System.out.println(">>>>>INFO:远程IHello对象绑定成功!");

} catch (RemoteException e) {

System.out.println("创建远程对象发生异常!");

e.printStackTrace();

} catch (AlreadyBoundException e) {

System.out.println("发生重复绑定对象异常!");

e.printStackTrace();

} catch (MalformedURLException e) {

System.out.println("发生URL畸形异常!");

e.printStackTrace();

}

}

}

绑定服务端口。

客户端使用类:

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2008-8-7 22:03:35

* 创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中。

*/

public class HelloServer {

public static void main(String args[]) {

try {

//创建一个远程对象

IHello rhello = new HelloImpl();

//本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上

LocateRegistry.createRegistry(8888);

//把远程对象注册到RMI注册服务器上,并命名为RHello

//绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)

Naming.bind("rmi://localhost:8888/RHello",rhello);

//            Naming.bind("//localhost:8888/RHello",rhello);

System.out.println(">>>>>INFO:远程IHello对象绑定成功!");

} catch (RemoteException e) {

System.out.println("创建远程对象发生异常!");

e.printStackTrace();

} catch (AlreadyBoundException e) {

System.out.println("发生重复绑定对象异常!");

e.printStackTrace();

} catch (MalformedURLException e) {

System.out.println("发生URL畸形异常!");

e.printStackTrace();

}

}

}

指定服务器与指定端口。

感谢leizhimin。

java8的rmi_Java中的RMI相关推荐

  1. stream() 求和_Java教程:Java8统计list中指定属性的最大、最小、平均值、求和

    点击上方关注订阅黑码教主获取更多精彩内容 Java8统计list中指定属性的最大.最小.平均值.求和 使用方式: list.stream().mapToDouble(Student1::getScor ...

  2. java 8 list,JAVA8 ListListInteger list中再装一个list转成一个list操作

    我就废话不多说了,大家还是直接看代码吧~ List collect = IntStream.range(1, 10).boxed().collect(Collectors.toList()); Lis ...

  3. java8的lambda中的map相关操作

    0 入门详解篇 1   史上最简单入门:java8的lambda中的map相关操作:基础及注意事项图文详解 2   java8的lambda中collect接口案例及原理详解,官方文档解读 3   j ...

  4. Java8的Stream中的Collectors操作求double类型和的坑

    Java8的Stream中的Collectors操作求double类型和的坑 无敌踩坑王的我又双叒叕来了!!!!!! 例子: @Testpublic void testSumDouble() {dou ...

  5. java8的stream中的toMap

    我们将对这个List使用java8的strea中的toMap转换成Map对象. toMap有个三个重载的方法,toConcurrentMap同理: 两个参数 public static <T, ...

  6. Java RMI(2):项目中使用RMI

    转载地址: http://6221123.blog.51cto.com/6211123/1112619 点击打开链接 RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序 2 ...

  7. 深究Java中的RMI底层原理

    原博客地址:http://blog.csdn.net/sinat_34596644/article/details/52599688 前言:随着一个系统被用户认可,业务量.请求量不断上升,那么单机系统 ...

  8. java8 base64_Java 8中的Base64 –加入乐趣为时不晚

    java8 base64 最后,Java 8发布了. 最后,有一种执行Base64编码的标准方法. 长期以来,我们一直依赖于Apache Commons Codec(无论如何还是很棒的). 内存敏感的 ...

  9. java中使用rmi进行远程方法调用

    java中进行远程方法调用,能支持分布式计算.并且可以实现在server的修改,能反应到各个client. 假如server的ip是:192.168.11.2, server端的代码如下: /*** ...

最新文章

  1. 用Windows电脑训练深度学习模型?超详细配置教程来了
  2. list-style 属性 2015-11-5
  3. 代码居中对齐_一篇文章带你了解CSS对齐方式
  4. Intellij idea导入项目时没有目录结构
  5. 机器学习 文本分类 代码_无需担心机器学习-如何在少于10行代码中对文本进行分类
  6. 奇妙的曲线--希尔伯特曲线
  7. 【转】DICOM通信 - PDU数据包(1)
  8. 【阿里云MVP月度分享】SaaS服务商如何通过数加平台统计业务流量
  9. String,StringBuilder, StringBuffer
  10. 编辑器未包含main类型_利用 ONLYOFFICE 将在线文档编辑器集成到 Python Web 应用程序中...
  11. 外媒:苹果公司将在美国为其“苹果汽车”生产电池
  12. java设计模式之模板方法
  13. MFC获取文件夹路径并得到该字符串
  14. maven打包报错找不到符号,由于找不到类中方法的解决思路
  15. 8岁小学生表白遭拒:被一部iPhone打败
  16. 拓端tecdat|R语言进行数据结构化转换:Box-Cox变换、“凸规则”变换方法
  17. B站视频下载方法之--手机下载后再转移至电脑
  18. 多元线性回归模型的特征选择:全子集回归、逐步回归、交叉验证
  19. matlab生成全黑图片,程序第一次可以运行,第二次运行图片是全黑的
  20. redis设计与实现-数据库篇

热门文章

  1. 服务降级-降级的概念
  2. Synchronized结合Java Object对象中的 wait,notify,notifyAll
  3. 工程搭建:搭建子工程之搭建实体类模块和lombok插件
  4. SpringCloud版本定义说明
  5. SpringBoot高级消-息-RabbitMQ基本概念简介
  6. Bootstrap全局css样式_代码
  7. TensorFlow机器学习实战指南之第一章
  8. 用Windows Server实现软件定义存储之存储空间直连
  9. Puppet exec资源介绍(二十六)
  10. zabbixproxy安装