RMI初探

news2024/11/29 0:38:13


接口


import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IFoo extends Remote {
    String say(String name) throws RemoteException;
}

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IBar extends Remote {
    String buy(String name) throws RemoteException;
}

实现


import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class FooImpl /* extends UnicastRemoteObject */ implements IFoo {

    private int index;

    public FooImpl() throws RemoteException {
        this(0);
    }

    public FooImpl(int port) throws RemoteException {
        UnicastRemoteObject.exportObject(this, port);
    }

    @Override
    public String say(String name) throws RemoteException {
        String message = "say" + (index++);
        System.out.println(message);
        return name + ": " + message;
    }
}

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class BarImpl implements IBar {

    private int index;

    public BarImpl() throws RemoteException {
        this(0);
    }

    public BarImpl(int port) throws RemoteException {
        UnicastRemoteObject.exportObject(this, port);
    }

    @Override
    public String buy(String name) throws RemoteException {
        String message = "buy" + (index++);
        System.out.println(message);
        return name + ": " + message;
    }
}

Server


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 Server {

    public static void main(String[] args) throws RemoteException, AlreadyBoundException, MalformedURLException {

        IBar bar = new BarImpl();
        IFoo foo = new FooImpl();
        //方式一
        Registry registry = LocateRegistry.createRegistry(58082);
        registry.bind("bar", bar);
        //方式二
        Naming.bind("rmi://192.168.31.141:58082/foo", foo);

    }
}

bind 方法会向 RegistryImpl的Hashtable<String, Remote> bindings属性put操作


服务端 registry 对象的属性如下

在这里插入图片描述


服务端有一个线程(RMI TCP Accept-58082) 监听 58082 端口

在这里插入图片描述



ObjectTable.objTable

在这里插入图片描述


ObjectTable.implTable

在这里插入图片描述




客户端


import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Client {

    public static void main(String[] args) throws Exception {

        //方式一
        Registry registry = LocateRegistry.getRegistry("192.168.31.141", 58082);
        IFoo foo = (IFoo) registry.lookup("foo");
        System.out.println(foo.say("druid"));

        //方式二
        IBar bar = (IBar) Naming.lookup("rmi://192.168.31.141:58082/bar");
        System.out.println(bar.buy("hikari"));
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1172288.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【已解决】设置SSH主机:VS Code-正在本地下载 VS Code 服务器

问题描述 很简单&#xff0c;就是我电脑强制重启之后用vscode再去连服务器&#xff0c;发现连不上了 解决办法 如上图&#xff0c;点击重试按钮&#xff0c;下面的这些东西就可以复制粘贴了 ctrf查找commit&#xff0c;这个时候就能找到一串d037ac076cee195194f93ce6fe2bdfe296…

leetcode:387. 字符串中的第一个唯一字符

一、题目 函数原型 int firstUniqChar(char* s) 二、算法 设置一个大小为26的字符数组&#xff0c;位置0 - 25 分别对应字符 a - z 。遍历两次字符串&#xff0c;第一次记录下每个字符出现的次数&#xff0c;第二次检查哪个字符最先遍历到且出现次数为1&#xff0c;返回该字符即…

【CIO人物展】黄淮学院副CIO周鹏:构建数智化平台赋能学校高质量发展

周鹏 本文由黄淮学院副CIO周鹏投递并参与《2023中国数智化转型升级优秀CIO》榜单/奖项评选。丨推荐企业—锐捷网络 大数据产业创新服务媒体 ——聚焦数据 改变商业 黄淮学院是2004年经教育部批准成立的一所省属全日制普通本科高校。学校位于素有“豫州之腹地、天下之最中”之美…

【每日一题】数组中两个数的最大异或值

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;哈希集合 其他语言python3 写在最后 Tag 【哈希集合】【位运算-异或和】【数组】【2023-11-04】 题目来源 421. 数组中两个数的最大异或值 题目解读 找出数组中两个数的最大异或结果。 解题思路 一看数据量达到了 …

【leetcode】88. 合并两个有序数组(图解)

目录 1. 思路&#xff08;图解&#xff09;2. 代码 题目链接&#xff1a;leetcode 88. 合并两个有序数组 题目描述&#xff1a; 1. 思路&#xff08;图解&#xff09; 思路一&#xff1a;&#xff08;不满足题目要求&#xff09; 1. 创建一个大小为nums1和nums2长度之和的…

做读书笔记时的一个高效小技巧

你好&#xff0c;我是 EarlGrey&#xff0c;一名双语学习者&#xff0c;会一点编程&#xff0c;目前已翻译出版《Python 无师自通》、《Python 并行编程手册》等书籍。 在这里&#xff0c;我会持续和大家分享好书、好工具和高效生活、工作技巧&#xff0c;欢迎大家一起提升认知…

emoji对齐 特殊字符对齐 文本对齐

emoji如何对齐 特殊字符如何对齐 高级文本对齐 问题引出 我们在程序打印输出时&#xff0c;如何我们所输出的字符中包含emoji文本&#xff0c;或者其它特殊的字符文本&#xff0c;则我们的打印对齐效果将出现错位。以下代码复现了这一效果&#xff08;tips&#xff1a; 马老师…

“第六十天”

SRAM和DRAM&#xff1a; DRAM&#xff1a;动态RAM&#xff08;随机存期存储器&#xff09;&#xff0c;是使用栅极电容存储信息的&#xff1b; SRAM&#xff1a;静态RAM&#xff0c;是使用双稳态触发器存储信息的。 重点在于DRAM由于要通过电容放电来表示信息&#xff0c;所…

R语言gplots包的颜色索引表--全平台可用

R语言gplots包的颜色索引表–全平台可用

【Liunx系统编程】命令模式3

目录 一&#xff0c;zip/unzip压缩指令 二&#xff0c;tar打包/压缩/解包指令 三&#xff0c;uname获取系统信息指令 四&#xff0c;Liunx下常用且重要的按键和关机指令 五&#xff0c;文件之间的互传 1&#xff0c;Windows与Linux之间的互传 2&#xff0c;Linux系统之间…

初识JVM

1. JVM内存区域划分 jvm在启动的时候&#xff0c;会申请到一整个很大的内存区域。整个一大块区域&#xff0c;不太好用。为了更方便使用&#xff0c;把整个区域隔成了很多区域&#xff0c;每个区域都有不同的作用。 本地方法栈 此处提到的栈和数据结构中的栈不是一个东西&…

STM32F103C8T6第二天:按键点灯轮询法和中断法、RCC、电动车报警器(振动传感器、继电器、喇叭、433M无线接收发射模块)

1. 点亮LED灯详解&#xff08;307.11&#xff09; 标号一样的导线在物理上是连接在一起的。 将 PB8 或 PB9 拉低&#xff0c;就可以实现将对应的 LED 灯点亮。常用的GPIO HAL库函数&#xff1a; void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);//I/…

DeepSORT多目标跟踪——算法流程与源码解析

一、目标检测与目标追踪 1. 目标检测 在目标检测任务中&#xff0c;主要目标是识别图像或视频帧中存在的物体的位置和类别信息。这意味着目标检测算法需要定位物体的边界框&#xff08;Bounding Box&#xff09;并确定每个边界框内的物体属于哪个类别&#xff08;如人、汽车、…

SpringBoot-WebSocket浏览器-服务器双向通信

文章目录 WebSocket 介绍入门案例 WebSocket 介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并进行双向数据传输。 应用场景&#xff1a; 视…

基于 LangChain 构建 LLM 应用程序设计与实践

▼最近直播超级多&#xff0c;预约保你有收获 近期直播&#xff1a;《基 LangChain大模型架构案例实践》 —1— LangChain 是什么&#xff1f; LangChain 和 Semantic Kernel 是当前比较受欢迎的两款 LLM 应用开发框架。 LangChain 作为一个大语言模型应用开发框架&#xff0c;…

C++ 多态 纯干货讲解 复制可调试(1)

&#x1f4af; 博客内容&#xff1a;多态 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准C后端工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#xff1a;这里是CSD…

0007Java安卓程序设计-ssm基于Android的校园新闻管理系统

文章目录 **摘** **要**目 录开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘 要 网络的广泛应用给生活带来了十分的便利。所以把校园新闻管理与现在网络相结合&#xff0c;利用java技术建设校园新闻管理系统app&#xff0c;实…

【漏洞复现】Drupal_小于7.32版本 _“Drupalgeddon” SQL注入漏洞(CVE-2014-3704)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号CVE-2014-3704漏洞名称Drupal “Drupalgeddon” SQL注入漏洞漏洞…

搬家两年随笔

不知不觉中&#xff0c;我已经搬到这个地方两年多了。 回首这段时间&#xff0c;我感触颇深。 尽管这里地理位置较为偏僻&#xff0c;交通不是特别方便&#xff0c;但环境优美&#xff0c;绿树成荫&#xff0c;空气清新。 只是相对于之前的生活环境&#xff0c;这里离上班的地方…

【Linux】基本命令

和光同尘_我的个人主页 一直游到海水变蓝。 --余华 Linux基本命令 &#x1f56f;️前言基础指令lspwdcdtouchmkdirrmdirrmman**cp**mvcat**less指令**输出重定向 >追加重定向 >>输入重定向 <headtail&#xff08;查看日志常用&#xff09;管道时间相关指令dateca…