文件包testrmi 里有四个文件
(1)HelloInterface.java(远程接口)
(2)HelloImplementor.java(服务器类,实现远程接口)
public class HelloImplementor extends UnicastRemoteObject implements HelloInterface
无法逐一编译,直接全部编译
(3)生成存根 rmic –v1.2 testrmi.HelloImplementor
(4)编写主类HelloHelper 实例化服务器类,生成远程对象,并且向注册库命名注册远程对象。
(编写完了,一起注册了)
(这个 start rmiregistry , 运行的是哪个文件下的程序)
服务器端的HelloClient
为什么都在一个文件夹下,如果不是在一个文件下,不是在一个机器上呢???
HelloInterface h=(HelloInterface)Naming.lookup("rmi://localhost:1099/2-3");
HelloInterface:定了要在一个包里,要不然这个就识别不了,
localhost: 定了在一台机器上,要不然写IP地址。
这个包的问题,可以去掉
首先将,所有的package 去掉 ,让包 不在一个包里,但是编译的时候还是要一起编译,否则还是通过不了 ,
(1) 一起编译
运行rmic (1.2之后,不在生成skeleton)
(2)建立两个文件夹:
Server:
(网上一篇文章说,包含HelloImplementor_Stub,和HelloImplementor_Skel ,而不包含HelloImplementor.class。但是后者不在生成了,如果只包含前者,不包含HelloImplementor.class,运行出现错误,包含了HelloImplementor.class而不包含Stub,运行没有问题。)
Client:
(3)启动RMI注册:
是start rmiregistry ,而不是直接rmiregistry ( 换高版本后,命令样式改了??)
(4)在Server下启动 实现远程接口的对象的实例(里面同时运行的是向注册库 命名注册远程对象实例 hi)
(5) 在Client 下启动 访问程序