Remote Method Invocation是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。
编写一个RMI的步骤 定义一个远程接口,此接口需要继承java.rmi.Remote 开发远程接口的实现类 创建一个server并把远程对象注册到端口 创建一个client查找远程对象,调用远程方法 实例 定义一个远程接口public interface RemoteHelloWord extends java.rmi.Remote {
String sayHello() throws RemoteException;
}
为了处理远程方法发生的各种异常,每一个远程方法必须抛出一个java.rmi.RemoteException异常。
开发接口的实现类public class RemoteHelloWordImpl implements RemoteHelloWord {
@Override
public String sayHello() throws RemoteException {
return "Hello Word!";
}
}
创建一个Server并把对象注册到端口
创建并导出远程对象
用Java RMI registry 注册远程对象
public class RMIServer {
public static void main(String[] args) {
try {
RemoteHelloWord hello=new RemoteHelloWordImpl();
RemoteHelloWord stub=(RemoteHelloWord)UnicastRemoteObject.exportObject(hello, 9999);
LocateRegistry.createRegistry(1099);
Registry registry=LocateRegistry.getRegistry();
registry.bind("helloword", stub);
System.out.println("绑定成功!");
} catch (RemoteException e) {
e.printStackTrace();
} catch (AlreadyBoundException e) {
e.printStackTrace();
}
}
}
创建一个client查找远程对象,调用远程方法
public class RMIClient {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry("localhost");
RemoteHelloWord hello = (RemoteHelloWord) registry.lookup( "helloword");
String ret = hello.sayHello();
System.out.println(ret);
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
https://blog.csdn.net/a19881029/article/details/9465663
https://blog.csdn.net/lmy86263/article/details/72594760