第一步,创建remote接口:
定义接口extends Remote;
定义接口方法,注意需要throws RemoteException;
第二步,实现remote接口:
实现接口里定义的各个方法;
(optional)定义本地方法,即未在接口里定义的方法,client端看不到;
定义static main方法,这里需要实现下列几步:
System.setSecurityManager(new RMISecurityManager()); //创建并安装安全管理器
取得args[0]参数,实例化remote类obj;
Naming.rebind(args[0], obj); //绑定名字和对象
第三步,创建客户端类:
主要就是定义static main方法,这里需要实现下列几步:
取得args[0]指定的server名字;
用Naming.lookup(server名字)查找绑定的对象obj;
调用obj的各个方法,就像本地调用一样;
第四步,创建policy文件,例如,创建rmi.policy文件:
grant {
// Allow everything for now
permission java.security.AllPermission;
};
注意,以上仅是用作练习。
第五步,启动rmiregistry:
在dos窗口下,输入:start rmiregistry(回车)
会弹出新窗口,表示正在运行rmiregistry;
注意!一定要在remote类所在的目录下执行该命令。
第六步,启动server端程序:
输入命令:java server名 -Djava.security.policy="policy完整路径名"
第七步,启动client端程序:
输入命令:java server名
现在就可以看到client-server间的通讯了。
补充:实际测试发现,用一个helper对象封装所有需要传给remote类的方法参数,比起一个个参数传递性能要好很多。
helper对象一定要implements Serializable接口。