第一步,創建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接口。