JAVA RMI 实例
下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用。
分为以下四个步骤
1. 创建远程接口及声明远程方法(HelloInterface.java)
2. 实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java)
3. 启动RMI注册服务,并注册远程对象(HelloServer.java)
4. 客户端查找远程对象,并调用远程方法(HelloClient)
5. 执行程序:启动服务HelloServer;运行客户端HelloClient进行调用
具体代码及对应步骤如下:
1. 创建远程接口及声明远程方法(HelloInterface.java)
package cn.telling.rmi; import java.rmi.Remote;
import java.rmi.RemoteException; /**
* 远程接口必须扩展接口java.rmi.Remote
*
* @ClassName: HelloInterface TODO
* @author xingle
* @date 2015-9-28 下午4:37:12
*/
public interface HelloInterface extends Remote ,Serializable{
/**
* 远程接口方法必须抛出 java.rmi.RemoteException
*/
public String sayHello() throws RemoteException;; }
2. 实现远程接口及远程方法(继承UnicastRemoteObject)HelloImpl.java
package cn.telling.rmi; import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject; /**
* 扩展了UnicastRemoteObject类,并实现远程接口 HelloInterface
*
* @ClassName: HelloImpl TODO
* @author xingle
* @date 2015-9-28 下午4:38:47
*/
public class HelloImpl extends UnicastRemoteObject implements HelloInterface {
private String message; /**
* 必须定义构造方法,即使是默认构造方法,也必须把它明确地写出来,因为它必须抛出出RemoteException异常
*
* @param msg
* @throws RemoteException
*/
public HelloImpl(String msg) throws RemoteException {
this.message = msg;
} /**
*
* @Description: TODO
* @return
* @throws RemoteException
* @author xingle
* @data 2015-9-28 下午4:39:41
*/
@Override
public String sayHello() throws RemoteException {
System.out.println("Called by HelloClient");
return message;
} }
3. 启动RMI注册服务,并注册远程对象(HelloServer.java)
package cn.telling.rmi; import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry; /**
*
* @ClassName: HelloServer TODO
* @author xingle
* @date 2015-9-28 下午4:41:47
*/
public class HelloServer { public static void main(String[] args) {
try {
// 启动RMI注册服务,指定端口为1099 (1099为默认端口)
// 也可以通过命令 $java_home/bin/rmiregistry 1099启动
// 这里用这种方式避免了再打开一个DOS窗口
// 而且用命令rmiregistry启动注册服务还必须事先用RMIC生成一个stub类为它所用
LocateRegistry.createRegistry(1099);
// 创建远程对象的一个或多个实例
// 可以用不同名字注册不同的实例
HelloImpl service = new HelloImpl("hello,world!");
// 如果要把hello实例注册到另一台启动了RMI注册服务的机器上
// Naming.rebind("//192.168.1.105:1099/Hello",hello);
Naming.rebind("Hello", service);
System.out.println("Hello Server is ready.");
} catch (RemoteException e) {
System.out.println("Hello Server failed: " + e);
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} } }
4. 客户端查找远程对象,并调用远程方法(HelloClient)
package cn.telling.rmi; import java.rmi.Naming; /**
*
* @ClassName: HelloClient TODO
* @author xingle
* @date 2015-9-28 下午4:54:51
*/
public class HelloClient {
public static void main(String[] argv) {
try {
HelloInterface hello = (HelloInterface) Naming.lookup("Hello"); // 如果要从另一台启动了RMI注册服务的机器上查找hello实例
// HelloInterface hello =
// (HelloInterface)Naming.lookup("//192.168.1.105:1099/Hello"); // 调用远程方法
System.out.println(hello.sayHello());
} catch (Exception e) {
System.out.println("HelloClient exception: " + e);
}
} }
5. 执行程序:启动服务HelloServer;运行客户端HelloClient进行调用
执行结果:
服务端:

客户端:

参考:
- 《Head First 设计模式》
JAVA RMI 实例的更多相关文章
- Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例
RMI 相关知识 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网 ...
- java rmi 入门实例
java rmi 入门实例 (2009-06-16 16:07:55) 转载▼ 标签: java rmi 杂谈 分类: java-基础 java rmi即java远程接口调用,实现了2台虚拟机之 ...
- JAVA RMI远程方法调用简单实例[转]
RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外 一台 ...
- java rmi远程方法调用实例
RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外一台计 ...
- JAVA RMI远程方法调用简单实例(转载)
来源:http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html RMI的概念 RMI(Remote Method Invocati ...
- Java RMI 最简单实例
IHello.java import java.rmi.Remote; import java.rmi.RemoteException; public interface IHello extends ...
- Java RMI(远程方法调用) 实例与分析 (转)
目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocat ...
- Java RMI(远程方法调用) 实例与分析
目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocat ...
- Java RMI之HelloWorld篇
Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...
随机推荐
- java获取文件的md5值
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- Android 开发之 ---- 底层驱动开发(一) 【转】
转自:http://blog.csdn.net/jmq_0000/article/details/7372783 版权声明:本文为博主原创文章,未经博主允许不得转载. 驱动概述 说到 Android ...
- Vmware10如何打开vmware11建立的虚拟机
先说一下办法: 使用文本工具打开VMware 虚拟机配置文件(*.vmx文件),找到"virtualHW.version"一行,将值11修改为10保存即可. 修改之前: 硬件兼容性 ...
- easyUI-combobox 动态绑定数据源
前台 <link rel="stylesheet" type="text/css" href="../css/easyui.css"/ ...
- DPI
[iOS]查找数组NSArray中是否包含指定的元素 http://blog.csdn.net/zyq527758142/article/details/51278172 Dpi(每平方英寸像素数目) ...
- Word 宏命令大全
1. 为宏命令指定快捷键.在WORD中,操作可以通过菜单项或工具栏按钮实现,如果功能项有对应的快捷键的话,利用快捷键可以快速实现我们需要的功能.如最常见的CTRL+O.CTRL+A等等.WOR ...
- JavaScript学习笔记(一):介绍JavaScript的一些简单知识
JavaScript是世界上最流行的编程语言.这门语言可用于HTML和web,更可广泛用于服务器.PC.笔记本电脑和智能手机等设备.---------------------------------- ...
- iOS_XCode7_Launch Image 的初使用
之前一直没有做笔记的习惯,后来发现很多知识不常用,容易忘了,再去网上找的,很浪费时间,现在尝试着自己写写博客,可以是自己笔记,方便以后查询,如果有纰漏,欢迎指正. 1.Xcode7中 ,assets. ...
- Java类的加载
1.类的加载步骤 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三步来实现对这个类的初始化 加载:将class文件读入内存,并为之创建一个Class对象,任何类被使用 ...
- Python -- 数据加载、存储与文件格式
标签(空格分隔): Python 读入读出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源. 读写文本格式的数据 pandas提供了一 ...