4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。
例如:
1)创建远程接口TestRemote.java,源代码如下:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface TestRemote extends Remote {
public int add(int a, int b) throws RemoteException;
}
2)创建远程接口的实现类TestRemoteImpl.java,源代码如下:
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class TestRemoteImpl extends UnicastRemoteObject implements TestRemote {
protected TestRemoteImpl() throws RemoteException {
super();
}
public int add(int a, int b) throws RemoteException {
return a+b;
}
}
3)编写服务器端代码Server.java,源代码如下:
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class Server {
public static void main(String[] args) throws Exception {
try {
LocateRegistry.createRegistry(8808) ;
// 创建远程对象
TestRemote testRemote = new TestRemoteImpl();
// 奖名称绑定到对象
Naming.rebind("rmi://localhost:8808/server", testRemote);
System.out.println("RMI服务器正在运行。。。。。。");
} catch (Exception e) {
e.printStackTrace();
}
}
}
4)编写客户端代码 Client.java,源代码如下:
import java.rmi.Naming;
public class Client {
public static void main(String[] args) {
try {
String url = "rmi://localhost:8808/server";
TestRemote RmiObject = (TestRemote)Naming.lookup(url);
System.out.println(" 1 + 2 = " + RmiObject.add(1, 2) );
} catch (Exception exc) {
System.out.println("Error in lookup: " + exc.toString());
}
}
}
5)编译源代码:
javac Server.java
javac Client.java
6)为远程对象实现创建根和干:
要创建存根程序和骨架文件,应以包含远程对象实现的已编译类包全名运行 rmic 编译器。
存根(Stub)是远程对象在客户端的代理,它将RMI调用传递给服务器端的骨架(Skeleton),后者负责将该调用传递给实际的远程方法,
输入如下:
rmic -d E:\rmi TestRemoteImpl
其中;E:\rmi是代码保存的位置。
7)运行服务器端程序和客户端程序:
java Server
java Client