Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。
import java.rmi.*; public interface MyRemote extends Remote{ public String sayHello() throws RemoteException; }
import java.rmi.*; import java.rmi.server.*; public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{ public String sayHello(){ return "Server says: 'Hello'"; } public MyRemoteImpl() throws RemoteException{} public static void main(String[] args){ try{ MyRemote service = new MyRemoteImpl(); Naming.rebind("RemoteHello", service); }catch(Exception e){ e.printStackTrace(); } } }
打开新的cmd命令窗口,执行:
javac MyRemote.java javac MyRemoteImpl.java rmic MyRemoteImpl
打开新的cmd命令窗口,执行:
rmiregistry
打开新的cmd命令窗口,执行:
java MyRemoteImpl
import java.rmi.*; public class MyRemoteClient{ public static void main(String[] args){ new MyRemoteClient().go(); } public void go(){ try{ MyRemote service = (MyRemote)Naming.lookup("rmi://127.0.0.1/RemoteHello"); String s = service.sayHello(); System.out.println(s); }catch(Exception e){ e.printStackTrace(); } } }
javac MyRemoteClient.java java MyRemoteClient
(需要保证服务端第三步制作的stub与客户端程序在同一个目录)
原理图
总结:Client程序通过查找客户端stub与服务端的Skeleton进行通信,服务端的Skeleton调用服务端的实际执行程序,最终结果通过Skeleton、Stub返回给Client