挪用如许一个对象时,其参数为 "marshalled" 并将其从当地假造机发送到长途假造机(该长途假造机的参数为 "unmarshalled")上。该要领停止时,将编组来自长途机的效果并将效果发送到挪用方的假造机。假如要领挪用致使抛出非常,则该非常将指导给挪用方。
供应远端接见的时刻,我们起首须要定义远端能够接见哪些东西,在Java中,定义这类接口须要完成Remote接口
public interface Business extends Remote{ public String echo(String msg) throws RemoteException; }
定义完接口以后,这些功用是须要我们本身在Server端完成的,因而,声明一个类完成我们供应接口。
public class BusinessImpl implements Business{ @Override public String echo(String msg) throws RemoteException { if("quit".equalsIgnoreCase(msg)) { System.out.println("Server will be shutdown"); System.exit(0); } System.out.println("Message from client:"+msg); return "Server response:"+msg; } }
完成完这个要领以后,有一个问题是,怎样运转,既然是远端接见,一定得有端口号,一定得有实例,所以我们还须要注册我们的代码
public class Server { public static final String SERVER_REGISTER_NAME = "BusineeDemo"; public static void main(String[] args) throws RemoteException { int port = 2016; Business business = new BusinessImpl(); UnicastRemoteObject.exportObject(business,port); Registry registry = LocateRegistry.createRegistry(1099); registry.rebind(SERVER_REGISTER_NAME, business); } }
这里有两个Java的类:UnicastRemoteObject和LocateRegistry
一个接口:Registry
Registry接口:对简朴的远端对象供应一个远端接口用于供应存储和猎取远端对象的援用,而这些是经由过程恣意的String范例的变量称号猎取,bind,unbind,rebind要领是用于变动注册的这些称号,lookup和list要领是用于查询当前当前已绑定的对象。
UnicastRemoteObject类:用于导出一个远端对象
LocateRegistry类:是一个用来取得远端挪用对象援用的辅佐类顺序,主如果在一个特定的IP上构建一个远端对象来接收来自特定端口的回调。
简朴的效劳端完成了,如今来看客户端:
客户端代码就越发简朴,前面我们提到我们能够经由过程Registry的lookup要领来猎取当前已绑定的效劳,所以很天然,我们起首要取得这个Registry
public class Client { public static void main(String[] args) throws RemoteException, NotBoundException { // Registry registry = LocateRegistry.getRegistry("localhost"); Registry registry = LocateRegistry.getRegistry("localhost", 1099); Business business = (Business) registry.lookup(Server.SERVER_REGISTER_NAME); System.out.println(business.echo("Hello Server")); } }
以上就是怎样用java编写一个rmi的细致内容,更多请关注ki4网别的相干文章!