`
haofeng82
  • 浏览: 144415 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

RMI 学习 ------第一个RMI程序

阅读更多

这是看网上例子写的,记录了编写过程和全部源代码

感觉不是一般的难用啊,配来配去的,不是很方便…………

RMI:使客户端能够调用调用服务器端的对象的方法。

先看一下服务器端的需要做的事情。
1 被客户端调用的类。
  这里包括两部分:
1 一个接口,定义了可以被客户端调用的方法。
2 一个类,实现了上面接口的类。

接口必须实现java.rmi.Remove

完整代码:
package com.hf.rmi.server.test;

import java.rmi.*;

public interface PerfectTimeI extends Remote {

    long getPerfectTime() throws RemoteException;

}
 

类:
package com.hf.rmi.server.test;

import java.rmi.*;

import java.rmi.server.*;

import java.rmi.registry.*;

import java.net.*;

public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI {

public long getPerfectTime()

throws RemoteException {

return System.currentTimeMillis();

}

public PerfectTime() throws RemoteException {

super();

}

public static void main(String[] args) {

System.setSecurityManager(

new RMISecurityManager());

try {

PerfectTime pt = new PerfectTime();

Naming.rebind(

"//172.168.1.141:2005/PerfectTime" , pt);

System.out.println("Ready to do time");

} catch(Exception e) {

e.printStackTrace();

}

}

}

继承了UnicastRemoteObject并且实现了上面定义的接口。


为了方便,直接在当前类的main方法中创建了对象并启动了绑定


调用rmic命令创建stub
Rmic com.hf.rmi.server.test.PerfectTime

这就会生成两个类:PerfectTime_Skel.class,PerfectTime_Stub.class。其中第二个我们在客户端需要用到。

下面看一下客户端代码:

首先创建一个调用服务器端的类:
package com.hf.rmi.client.test;
 
import java.rmi.*;

import com.hf.rmi.server.test.PerfectTimeI;

public class DisplayPerfectTime {

public static void main(String[] args) {

System.setSecurityManager(

new RMISecurityManager());

try {

PerfectTimeI t =

(PerfectTimeI)Naming.lookup(

"rmi://172.168.1.141:2005/PerfectTime");

for(int i = 0 ; i < 10; i++)

System.out.println("Perfect time =" +

t.getPerfectTime());

} catch(Exception e) {

e.printStackTrace();

}

}

}

我们需要注意的是:在里面用到了PerfectTimeI 类。这个其实就是服务器端的那一个类。直接从服务器端拷过来就成了,注意要放到和服务器端相同的包下。
再将PerfectTime_Stub.class拷贝过来,也放置到同服务器端一致的位置上。


下面我们需要修改一下jdk的一些设置,

在jdk目录下的这个文件/YOUR_JDK_PATH/jre\lib\security\java.policy
的最后加入下面代码:
grant {
           permission java.net.SocketPermission "*:1024-65535",
                "connect,accept";
          permission java.net.SocketPermission "*:80","connect";


据说是开放了端口权限

接下来我们需要启动rmi

2 start rmiregistry 2005

运行服务器端程序:
cd D:\eclipse\workspace\RMIServer
进入服务器端路径
运行
Java -Djava.rmi.server.codebase=file:/D:/eclipse/workspace/RMIServer/  com.hf.rmi.server.test.PerfectTime
这里的“-Djava.rmi.server.codebase=file:/D:/eclipse/workspace/RMIServer/”主要是用来指定残根所在的位置。

这时候就会启动服务了。


cd D:\eclipse\workspace\RMIClient
运行 java com.hf.rmi.client.test.DisplayPerfectTime

分享到:
评论

相关推荐

    rmi23-carrental:我的分布式系统课程中有关RMI的下一个作业。 第2部分和第3部分。rmi1-carrental的启动器

    描述中的“第2部分和第3部分”表明这个项目是逐步进行的,学生可能已经完成了RMI的基础部分(第1部分),现在正进入更复杂的阶段。"rmi1-carrental的启动器"可能是一个程序或脚本,用于初始化RMI系统并启动相关的...

    第一个rmi简单的程序

    在这个"第一个简单的RMI程序"中,`server`文件夹可能包含了服务器端的代码,包括远程接口和实现,以及启动服务器的主类。`client`文件夹则可能包含客户端代码,用于查找远程对象并调用其方法。`download`可能包含了...

    分布式程序设计——RMI简单示例

    创建RMI应用的第一步是定义远程接口。这个接口声明了可以被远程调用的方法。例如: ```java import java.rmi.Remote; import java.rmi.RemoteException; public interface MyRemoteInterface extends Remote { ...

    Synaptics RMI4 Specification

    - **RMI 功能**:RMI 包括多种功能,每种功能都由一个特定的功能号标识。 - **功能编号**:每个功能都有一个唯一的功能编号,用于识别不同的功能。 - **寄存器**:RMI 使用不同类型的寄存器来存储数据和控制信息。 ...

    RMI-2-master:RMI 第二部分

    RMI的第二节是为了更好地理解RMI的Marshalling(对象序列化),在继续之前完成第一个活动是非常重要的。内容推荐工具: 蚀Java 1.6 或更高版本。 面向对象编程的中级知识。在 Eclipse 中安装: 克隆存储库。 在 ...

    C++ RMI代码

    C++ Remote Method Invocation (RMI) 是一种在分布式系统中实现对象间远程调用的技术,它允许一个程序在一台计算机上执行操作,而这些操作实际上是在另一台计算机上的对象上进行的。C++ 并非原生支持RMI,但通过第三...

    让VC++ 支持RMI功能类库 示例代码

    在IT领域,远程方法调用(Remote Method Invocation,简称RMI)是一种用于分布式计算的技术,它允许一个程序在不同的网络节点上执行另一程序的方法。RMI最初由Java语言提出并广泛应用,但此处提及的是如何在VC++环境...

    RMI_Alchemy_Processors_AutoBoot_Boot_Loader_User's_Guide

    AutoBoot作为一款高度灵活且强大的引导加载程序,为RMI Alchemy系列处理器提供了广泛的支持。通过对该手册的深入学习,用户不仅可以掌握如何构建和安装AutoBoot,还能了解如何根据具体需求对其进行定制化配置,从而...

    RMI.rar_rmi

    "ch11"可能是指该压缩包中的第11章内容,通常在教程或书籍中,这一章节可能详细介绍了如何创建和运行一个简单的RMI应用,包括设置环境、编写远程接口和实现、注册远程对象、编写客户端代码等步骤。通过实践这个例子...

    0729分布式通信框架-RMI1

    实现RMI程序包括创建远程接口、实现接口并继承UnicastRemoteObject、注册远程对象到Registry,以及在客户端调用远程方法。自定义RMI实现通常涉及编写服务器监听(如使用Socket)和客户端连接,数据的序列化和反序列...

    (转)用c++实现java的rmi服务

    在IT行业中,远程方法调用(Remote Method Invocation,简称RMI)是一种允许程序在不同的网络节点上执行对象方法的技术。Java RMI是Java平台提供的一个核心特性,它使得分布式计算变得简单。本篇我们将探讨如何使用...

    Java RMI Tutorial

    - **对象激活**:当远程对象第一次被调用时自动启动该对象所在的进程。 #### 5. **实战RMI** - **实战RMI**通常涉及以下几个步骤: - **定义远程接口**:定义远程对象的方法签名。 - **实现远程接口**:创建...

    07-RMI 利用分析.pdf

    在RMI利用分析中,文章还提到了服务注册和请求的流程,包括对RMIRegistry的bind方法的深入跟踪,观察到向RMIRegistry申请服务时,第三个参数对应于操作集中的操作。这部分讨论强调了对RMI协议细节的理解,以及如何...

    RMI-master:第 1 部分 RMI

    Java RMI(Remote Method Invocation),是Java开发的一种调用远程方法的技术。 它为基于 Java 的分布式应用程序中的服务器和客户端的通信提供了一种简单的机制。 使用 RMI 构建分布式应用程序包括: 客户端上 ...

    第10章-使用Java-2进行RMI编程教学课件PPT文档.pptx

    在第10章的学习中,我们将深入理解如何使用Java 2进行RMI编程。 ### 1. 创建定制的Socket类型 创建定制的Socket类型是为了满足特定的需求,如数据加密或特定协议的实现。这个过程涉及以下步骤: 1. 扩展`java.net...

    网络程序设计--武汉大学讲义

    - 第一章介绍了网络基础知识、网络程序设计的发展历程以及通信原语的概念。 - 第二章深入讨论了局域网编程技术,包括NETBIOS、类文件接口编程等内容。 - 第三章重点讲解了Socket编程的基础和高级应用。 - 第四章探讨...

    RMI.rar_remote

    远程方法调用(Remote Method Invocation,RMI)是Java编程语言中的一种机制,它允许一个对象的方法被运行在不同JVM(Java Virtual Machine)上的另一个对象调用。这个标题"RMI.rar_remote"暗示了这是一个关于Java ...

    rmi远程航班管理系统

    实现RMI的第一步是定义远程接口,这个接口声明了可以在远程对象上调用的方法。在航班管理系统中,可能有一个名为`FlightService`的接口,包含了诸如查询航班、预订座位等方法。接着,需要创建该接口的实现类,这些类...

    RMI规范 分布式

    第一章概述中,RMI被定义为Java的远程过程调用机制,允许不同Java虚拟机之间的对象通信,跨越单台或多台计算机。这种技术促进了分布式对象的使用,使得应用程序能够远程调用方法并共享资源。RMI的优势在于它的面向...

    Java语言程序设计第38-48章

    第47章“红黑树”是另一个关键的数据结构,它是一种自平衡二叉查找树,能保持近似平衡,使得插入和删除操作的时间复杂度为O(log n)。红黑树在Java集合框架中广泛使用,例如`java.util.TreeMap`和`java.util.TreeSet`...

Global site tag (gtag.js) - Google Analytics