【Java Web开发学习】远程方法调用RMI
Java RMI 远程方法调用Remote Method Invocation
转载:http://www.cnblogs.com/yangchongxing/p/9078061.html
1、创建远程方法接口(必须继承自java.rmi.Remote接口)
package cn.ycx.date; import java.rmi.Remote; import java.rmi.RemoteException; public interface DateRemote extends Remote { public String now() throws RemoteException; }
2、创建远程服务实现
远程对象必须实现java.rmi.server.UniCastRemoteObject类,该类的构造函数中将生成stub(存根)和skeleton(骨架), 这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为Stub(存根),而服务器端本身已存在的远程对象则称之为Skeleton(骨架)。其实此时的存根是客户端的一个代理,用于与服务器端的通信, 而骨架也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。
package cn.ycx.server; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.text.SimpleDateFormat; import java.util.Date; import cn.ycx.date.DateRemote; public class DateRemoteImpl extends UnicastRemoteObject implements DateRemote { private static final long serialVersionUID = -4892445365627614558L; protected DateRemoteImpl() throws RemoteException { super(); } @Override public String now() throws RemoteException { SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss"); return format.format(new Date()); } }
3、启动远程服务
package cn.ycx.server; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; // java cn.ycx.server.ServerTest public class ServerTest { //rmiregistry public static void main(String[] args) { try { Registry registry = LocateRegistry.createRegistry(1099); registry.bind("dateRemote", new DateRemoteImpl()); } catch (Exception e) { e.printStackTrace(); } System.out.println("RMI Server is ready..."); } }
4、创建客户端实现
package cn.ycx.client; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; import cn.ycx.date.DateRemote; // java -jar client.jar public class ClientTest { public static void main(String[] args) { DateRemote dateRemote; try { dateRemote = (DateRemote) Naming.lookup("rmi://192.168.1.190:1099/dateRemote");// System.out.println(dateRemote.now()); } catch (MalformedURLException e) { } catch (RemoteException e) { } catch (NotBoundException e) { } } }
导出为可执行jar
java -jar client.jar
运行结果:2018-05-23 17:26:58
分类:
00-Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端