rmi实验报告Word文件下载.doc
- 文档编号:3675305
- 上传时间:2023-05-02
- 格式:DOC
- 页数:6
- 大小:454KB
rmi实验报告Word文件下载.doc
《rmi实验报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《rmi实验报告Word文件下载.doc(6页珍藏版)》请在冰点文库上搜索。
计算机科学与技术
班级
计算机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集中注册的服务器,真正提供服务对象在网上注册,客户端只需从注册服务器上查找远程对象引用,然后调用远程方法,具体由谁提供服务由注册服务器来。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- rmi 实验 报告