`
haofeng82
  • 浏览: 140712 次
  • 性别: 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

分享到:
评论

相关推荐

    RMI示例程序,RMI学习

    一.MS-DOS下调试 二.在MYEclipse6.0下面调试第一个RMI程序

    第一个rmi简单的程序

    第一个简单的RMI程序,对初学者超级有用……

    RMI-master:第 1 部分 RMI

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

    RMI-2-master:RMI 第二部分

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

    uploader-server-go:Go for https中的第一个项目

    Go for 应用程序中的第一个项目 开始 安装 &run命令: go run server.go 从Docker开始 docker build -t uploader-server-go . docker run -d -p 8080:8080 --name uploader-server uploader-server-go 要重建...

    RMI_Snake:小吃应用程序是使用RMI开发的

    按下键盘上的方向按钮后,第一乐章将开始 该地图将定期放置“水果”,该水果会增加并获得积分(速度越快,越多) 该移动是由计时器执行的,在移动过程中,您必须按键以选择方向(如有必要),在下

    IBM SDK Java V8用户指南中文版(2019)

    第1章:产品概述 第2章:迁移 第3章:安装SDK 第4章:配置环境 第5章:开发Java应用程序 第6章:运行Java应用程序 第7章:性能调整 第8章:安全性 第9章:故障诊断与支持 第10章:利用数据压缩设备 第11章...

    Java高级程序设计实战教程第五章-Java序列化机制.pptx

    第5章 Java序列化机制 5.1 应用场景 5.2 相关知识5.3 实施过程 5.4 拓展知识5.5 拓展训练 5.6 课后小结5.7 课后习题 5.8 上机实训 Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前为第1页。...

    Java.Servlets编程指南

    第1章 servlet概述第2章 Java Web服务器第3章 第一个servlet 第4章 servlet链第5章 servlet-side Includes 第6章 会话管理第7章 安全性 第8章 HTML表单第9章 在servlet中使用JDBC 第10章 applet与servlet的通信第11...

    精通Java网络编程光盘资料

    提供了本书第7章的一个代理服务器的实现实例的源程序; \char7\7-3\ 聊天程序的服务器端实现 提供了本书第7章的聊天程序的服务器端实现实例的源程序; \char9\9-1\ 一个邮件事务的过程 提供了本书第9章的...

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    第一章. 企业应用中的作业调度 内容提要:什么是作业调度,作业调度为什么说是重要的,企业应用中的作业调度,非企业应用中的作业调度,作业调度与工作流,关于作业调度其他可选择方案 第二章. Quartz 起步 内容...

    JAVA_API1.6文档(中文)

    java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security...

    Java程序设计复习题.docx.docx

    一、选择题: Java程序设计复习题全文共19页,当前为第1页。 Java程序设计复习题全文共19页,当前为第1页。 运行Java程序需要的工具软件所在的目录是 A 。 JDK的bin目录 B. JDK的demo目录 C. JDK的lib目录 D. JDK的...

    java jdk-api-1.6 中文 chmd

    java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security...

    Java服务器程序设计

    14.1.1 创建第一个主页[/font] 14.1.2 从html文档到java源文件[/font] 14.2 语法[/font] 14.2.1 声明变量[/font] 14.2.2 条件语句[/font] 14.2.3 循环语句[/font] 14.2.4 注释[/font] 14.2.5 使用backquotes[/font] ...

    JDK_1_6 API

    java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security ...

    java api最新7.0

    java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi. 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security 包中的类...

    JavaAPI1.6中文chm文档 part1

    由于比较大分为两个部分,这是第一部分 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于...

    JavaAPI中文chm文档 part2

    java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security...

Global site tag (gtag.js) - Google Analytics