一个简单的RMI程序

xiaoxiao2022-06-12  31

经过两天的调试一个非常简单的rmi demo终于可以在一台机器上调用成功了。下面仔细回顾一下。 RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。下面我们通过具体的例子,建立一个简单的远程计算服务和使用它的客户程序 一个正常工作的RMI系统由下面几个部分组成: # 远程服务的接口定义 # 远程服务接口的具体实现 # Stub 和 Skeleton 文件 # 一个运行远程服务的服务器 # 一个RMI命名服务,它允许客户端去发现这个远程服务 # 类文件的提供者(一个HTTP或者FTP服务器) # 一个需要这个远程服务的客户端程序 下面我们一步一步建立一个简单的RMI系统。首先在你的机器里建立一个新的文件夹,以便放置我们创建的文件,为了简单起见,我们只使用一个文件夹存放客户端和服务端代码,并且在同一个目录下运行服务端和客户端。 如果所有的RMI文件都已经设计好了,那么你需要下面的几个步骤去生成你的系统: 1、  编写并且编译接口的Java代码 2、  编写并且编译接口实现的Java代码 3、  从接口实现类中生成 Stub 和 Skeleton 类文件 4、  编写远程服务的主运行程序 5、  编写RMI的客户端程序 6、  安装并且运行RMI系统 1.编写并且编译接口的Java代码 package test; import java.rmi.Remote; import java.rmi.RemoteException; public interface PerfectTimeI extends Remote{     long getPerfectTime() throws RemoteException; } 注释:   在这个接口里面要继承Remote接口,每个方法都要抛出RemoteException; 2.编写并且编译接口实现的Java代码 //PerfectTime.java //The implementation of the PerfectTime remote object package test; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI {   private static final long serialVersionUID = 1L;     public PerfectTime() throws RemoteException {     }     public long getPerfectTime() throws RemoteException {         return System.currentTimeMillis();     } } 注释:   这个类是接口的实现类。   需要实现PerfectTimeI接口并且要继承 UnicastRemoteObject。   需要写一个无参数的构造函数,使他抛出RemoteException。 3.从接口实现类中生成 Stub 和 Skeleton 类文件 javac test\PerfectTimeI.java javac test\PerfectTime.java rmic  test.PerfectTime 4.编写远程服务的主运行程序 package test; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class PerfectServer {     public static void main(String[] args) {         PerfectTimeI pt;         try {             pt = new PerfectTime();             Registry memberRegistry=LocateRegistry.createRegistry(10088);             System.out.println(pt.getPerfectTime());             memberRegistry.bind("PerfectTime", pt);             System.out.print("ok");         } catch (RemoteException e) {             e.printStackTrace();         } catch (AlreadyBoundException e) {             e.printStackTrace();         }     } } 注释:   这里主要是设定绑定   首先应该Registry memberRegistry=LocateRegistry.createRegistry(10088);设定程序监听端口;   再进行绑定memberRegistry.bind("PerfectTime", pt);   5.编写RMI的客户端程序 package test; import java.rmi.Naming; public class DisplayPerfectTime {     /** * DisplayPerfectTime 构造子注解。 */     public DisplayPerfectTime() {         super();     }     public static void main(String[] args) {         try {             PerfectTimeI t = (PerfectTimeI) Naming.lookup("rmi://192.168.1.100:10088/PerfectTime");           for (int i = 0; i < 10; i++) {                 System.out.println("PerfectTime:" + t.getPerfectTime());             }         } catch (Exception e) {             e.printStackTrace();         }     } } 注释:   1.Naming.lookup("rmi://192.168.1.100:10088/PerfectTime");返回的是一个PerfectTime_stub他的类型是PerfectTimeI   2.这个lookup的url是rmi://192.168.1.100:10088/PerfectTime     rmi://ip address:port/binding_name 6、  安装并且运行RMI系统 java test.PerfectServer //运行服务器端 //编译客户端并运行ta javac test\DisplayPerfectTime.java java test.DisplayPerfectTime

相关资源:第一个rmi简单的程序
转载请注明原文地址: https://www.6miu.com/read-4932188.html

最新回复(0)