下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用。

分为以下四个步骤

1. 创建远程接口及声明远程方法(HelloInterface.java)
2. 实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java)
3. 启动RMI注册服务,并注册远程对象(HelloServer.java)
4. 客户端查找远程对象,并调用远程方法(HelloClient)
5. 执行程序:启动服务HelloServer;运行客户端HelloClient进行调用

具体代码及对应步骤如下:

1. 创建远程接口及声明远程方法(HelloInterface.java)

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

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)

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)

java 代码
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进行调用

执行结果:

服务端:

客户端:


参考:
  1. JAVA RMI 实例

  2. 《Head First 设计模式》

JAVA RMI 实例的更多相关文章

  1. Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例

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

  2. java rmi 入门实例

    java rmi 入门实例 (2009-06-16 16:07:55) 转载▼ 标签: java rmi 杂谈 分类: java-基础    java rmi即java远程接口调用,实现了2台虚拟机之 ...

  3. JAVA RMI远程方法调用简单实例[转]

    RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外 一台 ...

  4. java rmi远程方法调用实例

    RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外一台计 ...

  5. JAVA RMI远程方法调用简单实例(转载)

    来源:http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html RMI的概念 RMI(Remote Method Invocati ...

  6. Java RMI 最简单实例

    IHello.java import java.rmi.Remote; import java.rmi.RemoteException; public interface IHello extends ...

  7. Java RMI(远程方法调用) 实例与分析 (转)

    目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocat ...

  8. Java RMI(远程方法调用) 实例与分析

    目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocat ...

  9. Java RMI之HelloWorld篇

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

随机推荐

  1. Microsoft.CompactFramework.CSharp.targets not found

    今天打开VS2008的智能设备项目,报以下错误,应该是文件找不到了. The imported project "C:\WINDOWS\Microsoft.NET\Framework\v3. ...

  2. hadoop是什么

    Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. <Hadoop基础教程> ...

  3. JAVA基础知识之Annotation

    基本Annotation Annotation必须使用工具(APT, Annotation tool)才能处理,Annotation可以在编译,类加载,运行时被读取,并执行相应处理. 下面介绍一些常用 ...

  4. 挑战程序2.1.5 穷竭搜索>>宽度优先搜索

    先对比一下DFS和BFS         深度优先搜索DFS                                   宽度优先搜索BFS 明显可以看出搜索顺序不同. DFS是搜索单条路径到 ...

  5. 一首诗,致亲爱的csdn

    来自csdn的Rachel-Zhang姐姐 还记得--致亲爱的csdn 还记得你年轻时的摸样? 简单的文字,无瑕的脸庞. 现在的你,满脸风霜. 五粮液的广告,在我的文章中久久荡漾. 还记得当初的梦想? ...

  6. 自动拒绝恶意IP远程登录Linux服务器脚本

    当我们已经配置了iptables防火墙,我们允许22端口对外网所有人访问,当然这也是为了方便,我们在任何地方都连接上,没有做VPN,也没有做ssh密钥验证,但是我们的密码设置得非常复杂,大小写.特殊符 ...

  7. R画图中英文字体完美解决方案

    在某些时候,需要在R画图中添加中文,但是默认情况下,R对中文的支持不好. 当用R画PDF图,并且图中有中文的时候,安装并加载如下包library(showtext)然后:showtext.auto(e ...

  8. Upload java coed in Ubuntu(在Linux 16上,上传代码)

    指令如下:(按照如下指令顺序执行即可) 1.git status  (注释:可以查看哪些代码改动了) 2.git add .     (注意:不要漏掉add后面的" . ",将本地 ...

  9. 8.mvc core上传文件

    以下方法均是个人,仅供参考 public interface IFileHelper { /// <summary> /// 保存文件 (返回 Test.jpg) 出错就返回 error| ...

  10. 遗传算法在JobShop中的应用研究(part 5:解码)

    解码操作是整个遗传算法最重要的一步,在这步里面我们利用配置文件中的信息将染色体解码成一个有向无环图. 在介绍解码操作之前我们先来看一下配置文件,在part1绪论中我们已经介绍了一个车间调度问题的基本信 ...