什么是RMI?

维基百科:一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。

什么是序列化及反序列化

(1)序列化:把对象转换为字节序列的过程称为对象的序列化。

(2)反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

对象序列化用途:

1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

2) 在网络上传送对象的字节序列。

RMI远程调用步骤:

1),客户对象调用客户端辅助对象(stub对象)上的方法;

2),客户端辅助对象打包调用信息(变量,方法名),通过网络发送给服务端辅助对象(skeleton对象);

3),服务端辅助对象将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象;

4),调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象;

5),服务端辅助对象将结果打包,网络发送给客户端辅助对象;

6),客户端辅助对象将返回值解包,返回给客户对象;

7),客户对象获得返回值;

RMI实例:

共同部分,包含Person.java,ImyRemote.java;

import java.io.Serializable;

public class Person implements Serializable {

/**

* 序列化ID

*/

private static final long serialVersionUID = -3245478690496182643L;

public String name;

public int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface IMyRemote extends Remote {

String sayHello() throws RemoteException;

Person getPerson() throws RemoteException;

}

Server部分,包含MyRemoteImpl.java,Server.java:

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class MyRemoteImpl extends UnicastRemoteObject implements IMyRemote {

public MyRemoteImpl() throws RemoteException {

}

@Override

public String sayHello() {

return "server say,hello world";

}

@Override

public Person getPerson() throws RemoteException {

return new Person("张三",18);

}

}

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.RemoteException;

public class Server {

public static void main(String[] args) {

try{

// LocateRegistry.createRegistry(1099);

IMyRemote iRemote = new MyRemoteImpl();

Naming.rebind("rmi://198.181.47.219:1099/remoteServer", iRemote);

System.out.println("绑定成功");

}catch (RemoteException e){

System.out.println("RemoteException");

e.printStackTrace();

} catch (MalformedURLException e) {

System.out.println("MalformedURLException");

e.printStackTrace();

}

}

}

Client部分,包含Client.Java:

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;

public class Client {

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

IMyRemote client = (IMyRemote) Naming.lookup("rmi://198.181.47.219:1099/remoteServer");

System.out.println(client.sayHello());

Person p = client.getPerson();

System.out.println("name:" + p.getName() + "age:" + p.getAge());

}

}

注:

(1) 启动远程服务前,需要先启动rmiregistry(Naming.rebind注册服务,rmiregistry必须运行);

(2)传输的对象的类型必须成为可序列化类型(编译器无法发现);

java远程方法调用(rmi)--好_java 远程方法调用(RMI)相关推荐

  1. java调节音量代码_用Java调用VC音量控制程序_java

    前言 本文通过java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制.本文是多媒体信息系统的一个部分,就是调整计算机音量. 使用VC编写音量控制程序 本控 ...

  2. Java RMI(2):项目中使用RMI

    转载地址: http://6221123.blog.51cto.com/6211123/1112619 点击打开链接 RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序 2 ...

  3. RMI 异常 no security manager: RMI class loader disabled

    RMI 异常 no security manager: RMI class loader disabled 参考文章: (1)RMI 异常 no security manager: RMI class ...

  4. Java RMI 框架(远程方法调用)

    RMI(即Remote Method Invoke 远程方法调用).在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定 ...

  5. ava RMI 框架(远程方法调用)

    2019独角兽企业重金招聘Python工程师标准>>> RMI(即Remote Method Invoke 远程方法调用).在Java中,只要一个类extends了java.rmi. ...

  6. java rmi 超时_java RMI服务超时

    Netty的worker线程只负责nio,在收到完整数据后将数据按要求封装并放入到业务数据队列:业务处理类负责从该队列中取出数据并处理. 这里的业务处理类现在是如何实现的?按你的说法,单线程和多线程 ...

  7. java rmi配置_Java、Spring配置RMI连接

    1.新建J2EE项目A.B,在A.B项目中建立com.A.xfire包 2.项目A.B中导入spring-2.5.6.jar 3.在A.B项目中使用建立接口类com.A.xfire.XfireFaca ...

  8. java的基础类库称为_JAVA基本类库介绍

    8.1 包的概念 包是由.class文件组成的一个集合,.class文件时可以用Java解释其解释执行的文件,它也是由Java源的文件,即.Java文件经编译而生成的.Java是一种面向对象的语言,它 ...

  9. java词汇速查手册_java 词汇表速查手册

    Abstract class 抽象类:抽象类是不允许实例化的类,因此一般它需要被进行扩展继承. Abstract method 抽象方法:抽象方法即不包含任何功能代码的方法. Access modif ...

  10. Java基础学习笔记(二)_Java核心技术(进阶)

    本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...

最新文章

  1. javascript 通过键获取值
  2. 08_sklearn数据集,数据集划分train_test_split,sklearn.datasets及其api,sklearn分类数据集,sklearn回归数据集,转换器与预估器
  3. java 数据排序需求分析_java 实现数组全排序
  4. 轴承新旧型号对照表_精密机床主轴轴承,高端轴承进口清关报关流程
  5. 关于_vmvare workstation装32ubuntu的问题
  6. javascript --- JSON字符串化
  7. android 广告栏效果,实现android广告栏效果
  8. 信息学奥赛一本通(1313:【例3.5】位数问题)
  9. 阿里ai布局开始_如何开始使用AI
  10. linux 内核的链表操作(好文不得不转)
  11. calendar获取本周一的日期_Java日期时间API系列1-----Jdk7及以前的日期时间类
  12. java 数据流 中文_【Java I/O流】File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-wi...
  13. CCbot是什么梗?
  14. 关于actel FPGA下载的学习报告
  15. CoinUp开启GameFi新世界—魔法元世界(MAC)
  16. 贪婪洞窟2服务器维护,贪婪洞窟211月30日更新维护公告 贪婪洞窟211月30日更新了那些内容...
  17. uniapp 引导页 启动页 闪屏页功能介绍及部分功能实现
  18. 块状元素与内联元素嵌套规则
  19. Delphi 2009发布
  20. Imageproplus识别孔隙

热门文章

  1. django基础-学生管理系统
  2. JFinal开发8个常见问题
  3. ‘catkin_make‘ is currently not installed问题修复
  4. java数组基本用法(数组的声明/初始化及一些常用的数组操作)
  5. 【OpenCV】立体匹配算法SSD、NCC、ASW的基础实现
  6. 关于代码整理重构小记
  7. javascript高逼格代码实现数组去重,JSON深度拷贝,匿名函数自执行,数字取整等...
  8. 软件构建--系统设计
  9. Andrew Ng机器学习公开课笔记 -- Generative Learning algorithms
  10. 【转】jvm内存结构