zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    29 求和
    28 跳转控制语句 goto
    27 跳转控制语句 continue
    26 跳转控制语句 break
    25 打印金字塔
    24 打印九九乘法表
    23 多重循环控制
    22 do-while 循环
    21 while 循环
    20 for循环控制
  • 原文地址:https://www.cnblogs.com/veryvalley/p/8242799.html
Copyright © 2011-2022 走看看