Java RMI 实现示例

远程对象接口

 1 import java.rmi.Remote;
 2 import java.rmi.RemoteException;
 3 
 4 /**
 5  * 定义RMI远程对象接口,
 6  * 1.继承Remote
 7  * 2.所有方法必须抛出RemoteException
 8  */
 9 public interface IRmiObj extends Remote {
10     public void sayHello( String name) throws RemoteException;
11     public String getHello( String name) throws RemoteException;
12 
13 }

远程对象接口实现类

 1 import java.rmi.RemoteException;
 2 import java.rmi.server.UnicastRemoteObject;
 3 
 4 /**
 5  * 接口IRmiObj实现类
 6  * 1.接口实现类同时要实现Serializable接口,继承UnicastRemoteObject类,间接实现了serializable接口
 7  * 2.因为构造方法需要抛出RemoteException,所以不能缺省使用隐含的无参构造方法,而应该自己显式定义构造方法。
 8  */
 9 public class RmiObjImpl extends UnicastRemoteObject implements IRmiObj {
10     /**
11      * 因为构造方法需要抛出RemoteException,所以不能缺省使用隐含的无参构造方法,而应该自己显式定义构造方法。
12      *
13      * @throws RemoteException
14      */
15     public RmiObjImpl() throws RemoteException {
16         super();
17     }
18 
19     public void sayHello(String name) throws RemoteException {
20         System.out.println("welcome " + name);
21     }
22 
23     public String getHello(String name) throws RemoteException {
24         return "Hello " + name;
25     }
26 }

RMI服务端

 1 import java.net.MalformedURLException;
 2 import java.rmi.AlreadyBoundException;
 3 import java.rmi.Naming;
 4 import java.rmi.RemoteException;
 5 import java.rmi.registry.LocateRegistry;
 6 
 7 /**
 8  * Rmi服务端
 9  */
10 public class RmiServer {
11     public static void main(String[] args) throws RemoteException {
12         // 创建一个远程对象
13         IRmiObj rmi = new RmiObjImpl();
14         // 生成远程对象注册表Registry实例,并指定端口为8888,默认为1099
15         // 同一个端口的对象只能生成一次
16         LocateRegistry.createRegistry(8888);
17 
18         try {
19             // 把远程对象注册到RMI注册服务器上,并命名为rmi
20             Naming.bind("rmi://192.168.21.1:8888/rmi", rmi);
21             System.out.println("rmi://192.168.21.1:8888/rmi is runnig...");
22         } catch (AlreadyBoundException e) {
23             e.printStackTrace();
24         } catch (MalformedURLException e) {
25             e.printStackTrace();
26         }
27     }
28 }

RMI客户端

 1 import java.net.MalformedURLException;
 2 import java.rmi.Naming;
 3 import java.rmi.NotBoundException;
 4 import java.rmi.RemoteException;
 5 
 6 /**
 7  * Rmi客户端
 8  */
 9 public class RmiClient {
10     public static void main(String[] args) {
11         System.out.println("Hello World!");
12         try {
13             IRmi rmi = (IRmi) Naming.lookup("rmi://192.168.21.1:8888/rmi");
14             String res = rmi.getHello("zhangsan");
15             System.out.println(res);
16             rmi.sayHello("zhangsan");
17         } catch (NotBoundException e) {
18             e.printStackTrace();
19         } catch (MalformedURLException e) {
20             e.printStackTrace();
21         } catch (RemoteException e) {
22             e.printStackTrace();
23         }
24     }
25 }

 

posted @ 2018-01-08 15:09  veryvalley  阅读(271)  评论(0编辑  收藏  举报