java远程方法调用(rmi)--好_java 远程方法调用(RMI)
什么是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)相关推荐
- java调节音量代码_用Java调用VC音量控制程序_java
前言 本文通过java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制.本文是多媒体信息系统的一个部分,就是调整计算机音量. 使用VC编写音量控制程序 本控 ...
- Java RMI(2):项目中使用RMI
转载地址: http://6221123.blog.51cto.com/6211123/1112619 点击打开链接 RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序 2 ...
- RMI 异常 no security manager: RMI class loader disabled
RMI 异常 no security manager: RMI class loader disabled 参考文章: (1)RMI 异常 no security manager: RMI class ...
- Java RMI 框架(远程方法调用)
RMI(即Remote Method Invoke 远程方法调用).在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定 ...
- ava RMI 框架(远程方法调用)
2019独角兽企业重金招聘Python工程师标准>>> RMI(即Remote Method Invoke 远程方法调用).在Java中,只要一个类extends了java.rmi. ...
- java rmi 超时_java RMI服务超时
Netty的worker线程只负责nio,在收到完整数据后将数据按要求封装并放入到业务数据队列:业务处理类负责从该队列中取出数据并处理. 这里的业务处理类现在是如何实现的?按你的说法,单线程和多线程 ...
- 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 ...
- java的基础类库称为_JAVA基本类库介绍
8.1 包的概念 包是由.class文件组成的一个集合,.class文件时可以用Java解释其解释执行的文件,它也是由Java源的文件,即.Java文件经编译而生成的.Java是一种面向对象的语言,它 ...
- java词汇速查手册_java 词汇表速查手册
Abstract class 抽象类:抽象类是不允许实例化的类,因此一般它需要被进行扩展继承. Abstract method 抽象方法:抽象方法即不包含任何功能代码的方法. Access modif ...
- Java基础学习笔记(二)_Java核心技术(进阶)
本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...
最新文章
- javascript 通过键获取值
- 08_sklearn数据集,数据集划分train_test_split,sklearn.datasets及其api,sklearn分类数据集,sklearn回归数据集,转换器与预估器
- java 数据排序需求分析_java 实现数组全排序
- 轴承新旧型号对照表_精密机床主轴轴承,高端轴承进口清关报关流程
- 关于_vmvare workstation装32ubuntu的问题
- javascript --- JSON字符串化
- android 广告栏效果,实现android广告栏效果
- 信息学奥赛一本通(1313:【例3.5】位数问题)
- 阿里ai布局开始_如何开始使用AI
- linux 内核的链表操作(好文不得不转)
- calendar获取本周一的日期_Java日期时间API系列1-----Jdk7及以前的日期时间类
- java 数据流 中文_【Java I/O流】File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-wi...
- CCbot是什么梗?
- 关于actel FPGA下载的学习报告
- CoinUp开启GameFi新世界—魔法元世界(MAC)
- 贪婪洞窟2服务器维护,贪婪洞窟211月30日更新维护公告 贪婪洞窟211月30日更新了那些内容...
- uniapp 引导页 启动页 闪屏页功能介绍及部分功能实现
- 块状元素与内联元素嵌套规则
- Delphi 2009发布
- Imageproplus识别孔隙
热门文章
- django基础-学生管理系统
- JFinal开发8个常见问题
- ‘catkin_make‘ is currently not installed问题修复
- java数组基本用法(数组的声明/初始化及一些常用的数组操作)
- 【OpenCV】立体匹配算法SSD、NCC、ASW的基础实现
- 关于代码整理重构小记
- javascript高逼格代码实现数组去重,JSON深度拷贝,匿名函数自执行,数字取整等...
- 软件构建--系统设计
- Andrew Ng机器学习公开课笔记 -- Generative Learning algorithms
- 【转】jvm内存结构