1、示例

三个角色:RMIService、RMIServer、RMIClient。(RMIServer向RMIService注册Stub、RMIService在RMIClient lookup时向其提供Stub)

服务端编写完后,把服务端的功能接口类给客户端,客户端编写自己的代码即可。(客户端通过向RMI Service查找指定的服务得到Stub,不用手动生成任何Stub)

代码:

server:

接口定义及实现:

 1 /**
 2  *       <br>
 3  *       在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象, 供客户端访问并提供一定的服务。JavaDoc描述:Remote 接口用于标识其方法可以从非本地虚拟机上 调用的接口。任何远程对象都必须直接或间接实现此接口。只有在“远程接口” (扩展 java.rmi.Remote 的接口)中指定的这些方法才可被远程调用。
 4  */
 5 public interface Hello extends Remote {
 6     /*
 7      * extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常, 则表明该方法可被客户端远程访问调用。
 8      */
 9     public String sayHello(String name) throws RemoteException;
10 }
11 
12 /**
13  *       远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时, 该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为“存根”, 而服务器端本身已存在的远程对象则称之为“骨架”。其实此时的存根是客户端的一个代理,用于与服务器端的通信,
14  *       而骨架也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。
15  */
16 /* java.rmi.server.UnicastRemoteObject构造函数中将生成stub和skeleton */
17 public class HelloImpl extends UnicastRemoteObject implements Hello {
18     private static final long serialVersionUID = -271947229644133464L;
19 
20     // 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常
21     public HelloImpl() throws RemoteException {
22         super();
23     }
24 
25     @Override
26     public String sayHello(String name) throws RemoteException {
27         // TODO Auto-generated method stub
28         return "hello " + name;
29     }
30 }
View Code

相关文章:

  • 2022-12-23
  • 2021-08-27
  • 2022-12-23
  • 2021-10-08
  • 2021-10-31
  • 2022-12-23
  • 2022-01-08
  • 2021-09-16
猜你喜欢
  • 2021-07-20
  • 2021-06-14
  • 2022-12-23
  • 2021-04-15
  • 2021-09-18
  • 2022-03-08
相关资源
相似解决方案