第一步,創(chuàng)建remote接口:
定義接口extends Remote;
定義接口方法,注意需要throws RemoteException;
第二步,實(shí)現(xiàn)remote接口:
實(shí)現(xiàn)接口里定義的各個(gè)方法;
(optional)定義本地方法,即未在接口里定義的方法,client端看不到;
定義static main方法,這里需要實(shí)現(xiàn)下列幾步:
System.setSecurityManager(new RMISecurityManager()); //創(chuàng)建并安裝安全管理器
取得args[0]參數(shù),實(shí)例化remote類obj;
Naming.rebind(args[0], obj); //綁定名字和對(duì)象
第三步,創(chuàng)建客戶端類:
主要就是定義static main方法,這里需要實(shí)現(xiàn)下列幾步:
取得args[0]指定的server名字;
用Naming.lookup(server名字)查找綁定的對(duì)象obj;
調(diào)用obj的各個(gè)方法,就像本地調(diào)用一樣;
第四步,創(chuàng)建policy文件,例如,創(chuàng)建rmi.policy文件:
grant {
// Allow everything for now
permission java.security.AllPermission;
};
注意,以上僅是用作練習(xí)。
第五步,啟動(dòng)rmiregistry:
在dos窗口下,輸入:start rmiregistry(回車)
會(huì)彈出新窗口,表示正在運(yùn)行rmiregistry;
注意!一定要在remote類所在的目錄下執(zhí)行該命令。
第六步,啟動(dòng)server端程序:
輸入命令:java server名 -Djava.security.policy="policy完整路徑名"
第七步,啟動(dòng)client端程序:
輸入命令:java server名
現(xiàn)在就可以看到client-server間的通訊了。
補(bǔ)充:實(shí)際測(cè)試發(fā)現(xiàn),用一個(gè)helper對(duì)象封裝所有需要傳給remote類的方法參數(shù),比起一個(gè)個(gè)參數(shù)傳遞性能要好很多。
helper對(duì)象一定要implements Serializable接口。