中国上海门户网站公众号天元建设集团有限公司 李增启 电话

web/2025/10/4 0:25:52/文章来源:
中国上海门户网站公众号,天元建设集团有限公司 李增启 电话,dw网站建设教程,wordpress 拼音RMI的本质就是实现在不同JVM之间的调用,它的实现方法就是在两个JVM中各开一个Stub和Skeleton#xff0c;二者通过socket通信来实现参数和返回值的传递。 有关RMI的例子代码网上可以找到不少,但绝大部分都是通过extend the interface java.rmi.Remote实现#xff0c;已经封装的…RMI的本质就是实现在不同JVM之间的调用,它的实现方法就是在两个JVM中各开一个Stub和Skeleton二者通过socket通信来实现参数和返回值的传递。      有关RMI的例子代码网上可以找到不少,但绝大部分都是通过extend the interface java.rmi.Remote实现已经封装的很完善了不免使人有雾里看花的感觉。下面的例子是我在《Enterprise JavaBeans》里看到的虽然很粗糙但很直观利于很快了解它的工作原理。 ⅠRMI工作原理(自定义实现一个Stub 和 Skeleton) 1. 定义一个Person的接口其中有两个business method, getAge() 和getName() Person代码:   public interface Person {          public int getAge() throws Throwable;          public String getName() throws Throwable;      }    2. Person的实现PersonServer类 PersonServer代码:   public class PersonServer implements Person {          private int age;          private String name;          public PersonServer(String name, int age) {              this.age  age;              this.name  name;          }          public int getAge() {              return age;          }          public String getName() {              return name;          }      }       3. 好我们现在要在Client机器上调用getAge()和getName()这两个business method那么就得编写相应的Stub(Client端)和Skeleton(Server端)程序。这是Stub的实现 Person_Stub代码: //存根stubPerson_Stub的实现:   import java.io.ObjectOutputStream;      import java.io.ObjectInputStream;      import java.net.Socket;      public class Person_Stub implements Person {          private Socket socket;          public Person_Stub() throws Throwable {              // connect to skeleton              socket  new Socket(computer_name, 9000);          }          public int getAge() throws Throwable {              // pass method name to skeleton              ObjectOutputStream outStream                   new ObjectOutputStream(socket.getOutputStream());              outStream.writeObject(age);              outStream.flush();              ObjectInputStream inStream                   new ObjectInputStream(socket.getInputStream());              return inStream.readInt();          }          public String getName() throws Throwable {              // pass method name to skeleton              ObjectOutputStream outStream                   new ObjectOutputStream(socket.getOutputStream());              outStream.writeObject(name);              outStream.flush();              ObjectInputStream inStream                   new ObjectInputStream(socket.getInputStream());              return (String)inStream.readObject();          }      }       注意Person_Stub和PersonServer一样都implements Person。它们都实现了getAge()和getName()两个business method不同的是PersonServer是真的实现Person_Stub是建立socket连接并向Skeleton发请求然后通过Skeleton调用PersonServer的方法最后接收返回的结果。 4. 骨架Skeleton的实现 Person_Skeleton代码:   import java.io.ObjectOutputStream;      import java.io.ObjectInputStream;      import java.net.Socket;      import java.net.ServerSocket;      public class Person_Skeleton extends Thread {          private PersonServer myServer;          public Person_Skeleton(PersonServer server) {              // get reference of object server              this.myServer  server;          }          public void run() {              try {                  // new socket at port 9000                  ServerSocket serverSocket  new ServerSocket(9000);                  // accept stubs request                  Socket socket  serverSocket.accept();                  while (socket ! null) {                      // get stubs request                      ObjectInputStream inStream                           new ObjectInputStream(socket.getInputStream());                      String method  (String)inStream.readObject();                      // check method name                      if (method.equals(age)) {                          // execute object servers business method                          int age  myServer.getAge();                          ObjectOutputStream outStream                               new ObjectOutputStream(socket.getOutputStream());                          // return result to stub                          outStream.writeInt(age);                          outStream.flush();                      }                      if(method.equals(name)) {                          // execute object servers business method                          String name  myServer.getName();                          ObjectOutputStream outStream                               new ObjectOutputStream(socket.getOutputStream());                          // return result to stub                          outStream.writeObject(name);                          outStream.flush();                      }                  }              } catch(Throwable t) {                  t.printStackTrace();                  System.exit(0);              }          }          public static void main(String args []) {              // new object server              PersonServer person  new PersonServer(Richard, 34);              Person_Skeleton skel  new Person_Skeleton(person);              skel.start();          }      }        Skeleton类 extends from Thread它长驻在后台运行随时接收client发过来的request。并根据发送过来的key去调用相应的business method。 5. 最后一个Client的实现 PersonClient 代码:   public class PersonClient {          public static void main(String [] args) {              try {                  Person person  new Person_Stub();                  int age  person.getAge();                  String name  person.getName();                  System.out.println(name   is   age   years old);              } catch(Throwable t) {                  t.printStackTrace();              }          }      }        Client(PersonClient)的本质是它要知道Person接口的定义并实例一个Person_Stub通过Stub来调用business method,至于Stub怎么去和Server沟通Client就不用管了。 注意它的写法 Person person new Person_Stub();而不是Person_Stub person new Person_Stub();为什么因为要面向接口编程嘛呵呵。 //RMI实质上就是生成2个类stubskeleton来进行参数和返回值的传递采用值传递方式 //类似于以前写的聊天室程序被传递的对象应实现java.io.Serializable接口转载于:https://www.cnblogs.com/yin-jingyu/archive/2012/06/14/2549361.html

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

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

相关文章

自己做个网站需要些什么企业网站建设哪家专业

记录第一次搭建环境过程。 如何选择开发环境 搭建C/C开发环境有很多种方式,如 MinGW vscode(MinGW 是GCC的Windows版本,本地编译环境)SSH隧道连接 vscode(远程Linux主机)wsl vscode(远程Li…

商城网站建设特点有哪些国家中职示范校建设专题网站

1、C语言中,非零值为真,真用1表示;零值为假,假用0表示。 2、转义字符参考: \a 蜂鸣,响铃 \b 回退:向后退一格 \f 换页 \n 换行 \r 回车,光标到本行行首 \t 水平制表 …

怎么申请网站域名php网站建设思路

使用conda安装opencv,并在docker运行的容器中使用,这里以运行则springboot应用的容器为例 步骤一:安装 在conda中安装 # 安装依赖 conda install numpy matplotlib# 安装opencv conda install -c conda-forge opencv # 或者制定版本 conda…

做燕鲍翅的网站seo关键词优化排名推广

php查询mysql乱码的解决办法:1、修改PHP页面语言本身的编码类型;2、将MySQL字符集更改为“UTF8”;3、使用ultraplus中的编码转换功能进行转换。php读取mysql中文数据出现乱码的解决方法1.PHP页面语言本身的编码类型不合适,这时候&…

红色为主的网站吉林省做网站公司

git hook 和 husky 1、git hook 让我们可以在 git 执行一些行为的前后时机,执行一些脚本。 2、比如 pre-commit ,能够在我们真正提交 commit 之前先执行一段代码,如果这段代码报错(exit 1),提交会被取消&…

巩义网站建设模板南宁高端网站建设

1.下载PHP和Apache 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意: 1.使用Apache作为服务器的话,一定要下载Thread Safe的,否则没有php8apache2_4.dll这个文件, 如果使用IIS的请下载 NON Tread safe的 2.如果…

网站二维码悬浮驻马店网站建设zmdsem

统计中文词频是Python考试中常见的操作,由于考察内容较多,因此比较麻烦,那么有没有好的方法来实现呢?今天,我们总结了四种常见的中文词频统计方法,并列出代码,供大家学习参考。 中文词频统计主…

建设网站服务器选择百度认证平台

目录 一、数据库建表(tb_user)以及添加数据。 (1)数据库与数据表说明。 (2)字段与数据说明。 二、创建模块(或工程)、导入对应所需依赖坐标。 三、编写MyBatis核心主配置文件。(解决JDBC中"硬编码"问题) (1&…

网站个人备案类型开发商延期交房怎么申请退房

用户表格及筛选表单配置 - PC通用管理模块(1) 多八多AiIDE - 用户管理页面配置教程 第一课:基础查询配置 目标 配置基础的PC端通用管理模块。添加前端自定义组件以显示管理页面。配置列表表格字段。配置筛选表单。 步骤 1. 注册和新建应用 访问多八多AiIDE平台…

百度不收录的网站做网站策划书

本页文章导读:▪php pchart乱码 有俩种情况:①:未将中文字符编码格式修改成utf-8 (例子如下:)mb_convert_encoding($data, "html-entities","utf-8" ); ②:字体库出现问题 (请使用simhei.ttf字体 此字体…

沈阳定制网站制作做网站有没有受骗过

前些天Hive查询的接口一直超时报警,登录上去查看发现这个超时报警的曲线很有规律,每个小时开始就出现,过了大约3分钟左右就好了.在这个期间里,也发现hive根本就执行不了,完全hang住了,机器负载,…

qq空间刷赞网站推广南京个人网站建设模板

为啥不直接用Cascader 级联选择组件呢?主要是因为作为老项目,已经引入了antd-mobile2.3.4,同时引入v5版本会有兼容性问题。 原始数据格式: 首先需要将后端返回的数据转为前端定义的格式,方便使用: [{&qu…

网站建设推广 seo从珠海回来都变黄码了

节点设置密码 1、修改配置文件 在配置文件里面增加密码选项,一定要加上masterauth,不然Redirected的时候会失败。 masterauth redispassword requirepass redispassword 修改后需要重启redis节点。 2、动态修改 连接redis节点进行配置设置,然…

峰峰网站建设凡科可以建设多个网站吗

https://www.cnblogs.com/cheneyboon/p/11454547.html

移动深圳网站前端个人介绍网站模板下载

由于 HDR 图像的动态范围超出了标准计算机显示器的显示范围。在 Photoshop 中打开 HDR 图像时,图像可能会非常暗或出现褪色现象。 Photoshop 提供了专门的预览调整功能,以使标准显示器显示的 HDR 图像的高光和阴影不会太暗或出现褪色现象。 预览调整设置…

潍坊网站建设工作网站域名查企业邮箱

很多同学需要源文档,所以添加了下载链接,方便大家共同学习进步~ 本文下载链接:http://files.cnblogs.com/yingying0907/Gabor%E7%AC%94%E8%AE%B0.zip Gabor变换是D.Gabor 1946年提出的。为了由信号的Fourier变换提取局部信息,引入…

上海市普陀区建设规划局网站wordpress侧边栏制作

目录 1、安装好Vscode 2、下载安装.NetCore SDK 3、配置C#环境 3.1 打开Vscode并下载扩展 3.2 Vscode中打开文件夹并配置环境 3.3 调试运行 1、安装好Vscode 2、下载安装.NetCore SDK 官网如下,下载完成后双击打开一路走到底就行.NetCore SDK官网 软件显示安…

制作网站图文教程营销策略怎么写

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 使用字典推导式可以快速生成一个字典,它的表现形式和列表推导式类似。例如,我们可以使用下面的代码生成一个包含4个随机数的字…

江西个人网站备案网站建设基础百度百科

工业交换机是现代工业网络中不可或缺的重要组成部分,它扮演着连接和管理各种网络设备的关键角色。工业交换机的优点不言而喻,首先是其稳定可靠的性能,能够支撑工业环境下的高负荷工作。无论是在恶劣的温度、湿度或电磁干扰的环境下&#xff0…

网站建设好后能直接打开吗上海仓储公司

文章目录 渗透测试漏洞原理任意文件读取1. 任意文件读取概述1.1 漏洞成因1.2 漏洞危害1.3 漏洞分类1.4 任意文件读取1.4.1 文件读取1.4.2 任意文件读取1.4.3 权限问题 1.5 任意文件下载1.5.1 一般情况1.5.2 PHP实现1.5.3 任意文件下载 2. 任意文件读取攻防2.1 路径过滤2.1.1 过…