// 遠程接口繼承自Remote<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
// 遠程方法的傳入參數和返回值必須是自然類型(int,float,boolean等)
// 或者實現了Serializable或Remote接口的對象。
public interface Time extends java.rmi.Remote {
// 遠程方法必須拋出RemoteException:
public String getTime() throws RemoteException;
}
2. 定義實現類
// 注意:實現類繼承自UnicastRemoteObject和自定義的遠程接口Time:
public class TimeImpl extends java.rmi.server.UnicastRemoteObject implements Time {
// 注意:由於RemoteObject構造函數要拋出RemoteException,
// 因此務必定義構造函數並拋出RemoteException:
public TimeImpl() throws RemoteException { super(); }
// 這裏是遠程方法:
public String getTime() throws RemoteException {
return "<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />12:04:27";
}
// 啓動服務:
public static void main(String[] args) throws Exception {
// 可以手動啓動RMI Registry,也可以在程序中啓動:
java.rmi.registry.LocateRegistry.createRegistry(1099);
// 綁定名字服務,地址是本地計算機名或本機IP,默認端口是1099:
java.rmi.Naming.bind("//localhost:1099/servicename", new TimeImpl());
// 如果沒有異常拋出,則綁定成功。
// 如果名字已經被綁定,可以用Naming.rebind()替換掉已綁定的服務。
}
}
3. 編譯生成樁和框架
運行rmic TimeImpl,生成TimeImpl_Skel.class和TimeImpl_Stub.class。
4. 客戶端
// 客戶端文件包含客戶端代碼Client.class,遠程接口Time.class,
// 由rmic生成的支持類TimeImpl_Skel.class和TimeImpl_Stub.class:
public static void main(String[] args) throws Exception {
// 客戶端通過IP引用服務器端的遠程對象,因此可以動態選擇服務器。
// 如果不指定端口,默認端口號是1099:
Time time = (Time)java.rmi.Naming.lookup("//localhost:1099/servicename");
System.out.println(time.getTime());
}
來源:http://blog.csdn.net/asklxf/archive/2004/07/04/33533.aspx