标签:rmi 异常 ace registry cli bin 服务 父类 lap
步骤:
1、创建远程接口,定义可以被远程调用的方法;
2、实现远程接口;(extends UnicastRemoteObject)
3、服务端向RMI registry注册服务器 ;(Naming.rebind("ServiceName",service)
4、客户端找到服务端;(Naming.lookup(“rmi://127.0.0.1/ServiceName”))
import java.rmi.*; //(extends Remote)Remote是标记性接口,没有方法. //接口可以继承接口 public interface MyRemote extends Remote { //声明可以被远程调用的方法 //(throws RemoteException) 每个远程调用方法都被认为是有风险的,这样声明会强迫客户端注意这件事 //(String) 返回值和参数会通过网络协议传送,所有必须是primitive或Serializable public String sayHello() throws RemoteException; }
import java.rmi.*; import java.rmi.server.*; //UnicastRemoteObject类会处理与远程有关的工作 public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote { public String sayHello(){ //实现可以被远程调用的方法 return "Server says, ‘Hey‘"; } public MyRemoteImpl() throws RemoteException{} //声明父类的构造函数会抛出异常 }
import java.rmi.Naming; public class MyRemoteServer { public static void main(String [] args){ try{ MyRemote service = new MyRemoteImpl(); //帮服务命名,并向RMI registry注册(客户端会靠名字查询registry) Naming.rebind("RemoteHello",service); }catch(Exception ex){ ex.printStackTrace(); } } }
import java.rmi.*; public class MyRemoteClient { public static void main(String[] args) { new MyRemoteClient().go(); } public void go(){ try { //(MyRemote)类型必须与服务器相同 MyRemote service = (MyRemote) Naming.lookup("rmi://127.0.0.1/RemoteHello"); String s = service.sayHello(); System.out.println(s); } catch (Exception ex) { ex.printStackTrace(); } } }
运行步骤:
1、rmic MyRemoteImpl (生成stub类)
2、rmiregistry(启动RMI registry)
3、java MyRemoteServer(启动服务)
4、java MyRemoteClient(运行客户端)
标签:rmi 异常 ace registry cli bin 服务 父类 lap
原文地址:https://www.cnblogs.com/bhjqn/p/13376482.html