rmi实验报告Word文件下载.doc

上传人:聆听****声音 文档编号:3675305 上传时间:2023-05-02 格式:DOC 页数:6 大小:454KB
下载 相关 举报
rmi实验报告Word文件下载.doc_第1页
第1页 / 共6页
rmi实验报告Word文件下载.doc_第2页
第2页 / 共6页
rmi实验报告Word文件下载.doc_第3页
第3页 / 共6页
rmi实验报告Word文件下载.doc_第4页
第4页 / 共6页
rmi实验报告Word文件下载.doc_第5页
第5页 / 共6页
rmi实验报告Word文件下载.doc_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

rmi实验报告Word文件下载.doc

《rmi实验报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《rmi实验报告Word文件下载.doc(6页珍藏版)》请在冰点文库上搜索。

rmi实验报告Word文件下载.doc

计算机科学与技术

班级

计算机1班

地点

520工作室

教师

李萌

一、实验目的:

了解RMI的调用过程及其使用方法。

二、实验要求和内容:

实现远程方法(RMI)调用,编写RMI客户端程序和RMI服务器端程序。

通过RMI客户端访问RMI服务器端的方法。

三、实验平台:

操作系统:

Windows7

编程工具:

MyEclipse

四、实验步骤:

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

2、实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java)

3、启动RMI注册服务,并注册远程对象(HelloServer.java)

4、客户端查找远程对象,并调用远程方法(HelloClient.java)

5、执行程序:

启动服务HelloServer;

运行客户端HelloClient进行调用

五、程序代码:

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

importjava.rmi.*;

/*远程接口必须扩展接口java.rmi.Remote*/

publicinterfaceHelloInterfaceextendsRemote

{/*远程接口方法必须抛出java.rmi.RemoteException*/

publicStringsay()throwsRemoteException;

}

2、实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java)

importjava.rmi.server.*;

/*扩展了UnicastRemoteObject类,并实现远程接口HelloInterface*/

publicclassHelloextendsUnicastRemoteObjectimplementsHelloInterface

{privateStringmessage;

/*必须定义构造方法,即使是默认构造方法,也必须把它明确地写出来,因为它必须抛出出RemoteException异常*/

publicHello(Stringmsg)throwsRemoteException

{message=msg;

}

/*远程接口方法的实现*/

publicStringsay()throwsRemoteException

{

System.out.println("

CalledbyHelloClient!

"

);

returnmessage;

}

3、启动RMI注册服务,并注册远程对象(HelloServer.java)

importjava.rmi.Naming;

importjava.rmi.registry.LocateRegistry;

publicclassHelloServer

{

/*启动RMI注册服务并进行对象注册*/

publicstaticvoidmain(String[]argv)

try{

/*启动RMI注册服务,指定端口为10991099为默认端口)*/

LocateRegistry.createRegistry(1099);

/*创建远程对象的一个或多个实例,下面是hello对象*/

/*可以用不同名字注册不同的实例*/

HelloInterfacehello=newHello("

Helloeveryone!

Mynameisxiezhixing."

/*把hello注册到RMI注册服务器上,命名为Hello*/

Naming.rebind("

Hello"

hello);

/*如果要把hello实例注册到另一台启动了RMI注册服务的机器上*/

/*Naming.rebind("

//192.168.1.105:

1099/Hello"

*/

System.out.println("

HelloServerisreadynow!

}

catch(Exceptione)

{System.out.println("

HelloServerfailed:

"

+e);

4、客户端查找远程对象,并调用远程方法(HelloClient.java)

publicclassHelloClient

{/*查找远程对象并调用远程方法*/

try{

HelloInterfacehello=(HelloInterface)Naming.lookup("

/*如果要从另一台启动了RMI注册服务的机器上查找hello实例*/

/*HelloInterfacehello=(HelloInterface)Naming.lookup("

/*调用远程方法*/

System.out.println(hello.say());

}

catch(Exceptione)

{

HelloClientexception:

}}

六、实验运行结果:

1、启动服务HelloServer

2、运行客户端HelloClient进行调用

3、运行客户端调用后的服务器端

七、实验总结分析:

本次实验中并没有用到JDK所带的命令rmic编译实现类得到存根(Stub)类,也没用命令rmiregistry命令来启动RMI注册服务。

在启动rmiregistry之前必须能让它加载到相应的stub类,这就是造成**_Stub类找不到的原因。

如果只是按上面的代码,则服务程序HelloServer客户端程序HelloClient都必须运行在本机(如此则RMI有何意义呢?

);

别急,只要修改HelloClient类,使用第二种形式的lookup查找语句,注释第一条lookup语句,取消注释第二条lookup语句

其中的IP地址和端口号1099为RMI注册服务器的IP和端口号,这样HelloClient就可以在另一台机器运行了,当然HelloInterface类必须能找到(但也可指定参数‐Djava.rmi.server.codebase从网络加载HelloInterface类)。

lookup("

)默认为从本机127.0.0.1的1099端口上查找Hello命令对象,如果第二条语句写成lookup("

192.168.1.105/Hello"

)与原语句是同等的,因为默认端口号就是1099。

代码中HelloServer和HelloClient省略了设置安全管理器的过程System.setSecurityManager(new 

RMISecurityManager());

,如果设置的安全管理则必须编写相应的访问策略文件,并且在执行时指定参数,无论是启动服务端还是客户端都可以用参数‐Djava.rmi.server.codebase=http:

//unmi.Blog

一样从网络上加载类,这样更方便于RMI客户端的部署,如RMI客户端是一个Applet可以拿单独一台机器运行rmiregistry(它需要能加载到相应的stub类,设置classpath)或用LocateRegistry.createRegistry(port),只作为RMI远程对象的RMI集中注册的服务器,真正提供服务对象在网上注册,客户端只需从注册服务器上查找远程对象引用,然后调用远程方法,具体由谁提供服务由注册服务器来。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2