在上篇blog中谈到RMI的问世由来只是大致的把一些概念结构说明了下,自己静静想想要有好的说明干脆用代码说明比较妥当也最为有说明性。事后自己倒腾了一个简单的代码DEMO。代码中有个简单的场景,比如你是属于某地区医保范围内的成员,到医院看病,这个候医院为了审核你的相关个人资料需要到医保管理部门调阅信息,你只需要给出用户名称或者其他一个有效参数交给工作人员通过网络到远程医保部门调阅信息即可。
废话不多说,代码最能说明问题了。首先出场的客户端的代码。
客户端
代理接口:
/**
*IUserInfo:代理接口
*
*@author:wgh
*/
public interface IUserInfo {
public UserInfoOut getValidate(UserInfoIn in) throws IOException, ClassNotFoundException;
}
后台桩基类(实现了代理接口):
/**
*UserInfoStub:后台桩基(stub)类,把接口中的参数通过套接字请求方式发送到服务端(接收返回对象或者参数)
*
*@author:wgh
*/
public class UserInfoStub implements IUserInfo {
Socket socket = null;
public UserInfoStub() throws IOException {
socket = new Socket("localhost", 8999);
}
public UserInfoOut getValidate(UserInfoIn in) throws IOException,ClassNotFoundException {
ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream());
os.writeObject(in);
os.flush();
ObjectInputStream is = new ObjectInputStream(socket.getInputStream());
UserInfoOut userInfo = (UserInfoOut) is.readObject();
return userInfo;
}
}
到这里客户端就基本结束了,呵呵。是不是很容易?接下来我们要看看服务端如何运作的:
服务端
实现类:
/**
*UserInfoImpl:实现类
*
*@author:wgh
*/
public class UserInfoImpl implements IUserInfo {
public UserInfoOut getValidate(UserInfoIn userInfoIn) {
if(userInfoIn.getParameter().equals("yeshucheng")){
UserInfoOut userInfoOut=new UserInfoOut();
userInfoOut.setId(userInfoIn.getId());
userInfoOut.setName("万国辉");
userInfoOut.setAge("30");
userInfoOut.setDescn("描述");
return userInfoOut;
}
return null;
}
}
后台骨架类:
/**
*UserInfoSkeleton:后台服务端(skeleton)类,通过ServerSocket处理请求参数根据需求返回对象值
*
*@author:wgh
*/
public class UserInfoSkeleton extends Thread{
public UserInfoImpl userInfoImpl;
Socket socket=null;
public UserInfoSkeleton(UserInfoImpl userInfoImpl){
this.userInfoImpl=userInfoImpl;
}
public void run(){
try {
ServerSocket server=new ServerSocket(8999);
System.out.println("Server Waiting...");
socket=server.accept();
ObjectInputStream oi=new ObjectInputStream(socket.getInputStream());
UserInfoIn userInfoIn=(UserInfoIn) oi.readObject();
UserInfoOut userInfoOut=userInfoImpl.getValidate(userInfoIn);
if(userInfoIn.getParameter().equals("yeshucheng")){
ObjectOutputStream os=new ObjectOutputStream(socket.getOutputStream());
os.writeObject(userInfoOut);
os.flush();
}
}catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
try{
if(socket!=null)
socket.close();
}catch(Exception e){
System.out.println(" socket is Exception not closed cause is:"+e.toString());
}
}
}
}
到这里服务端的代码也结束了。那我们还缺少什么呢?没错,就是传输的对象。在这里我们采用ValueObject的方式通过两个对象来说明,一个是请求对象,一个是返回相应对象。
值对象:
/**
*UserInfoIn:发送对象
*
*@author:wgh
*/
public class UserInfoIn implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String parameter;
public String getId() {
returnid;
}
public void setId(String id) {
this.id = id;
}
public String getParameter() {
returnparameter;
}
public void setParameter(String parameter) {
this.parameter = parameter;
}
}
分享到:
相关推荐
3. java.rmi.server.RMIServerSocketFactory:自定义服务器套接字工厂,用于控制服务器端的网络通信。 4. java.rmi.client.RMIClientSocketFactory:自定义客户端套接字工厂,用于控制客户端的网络通信。 四、RMI的...
综上所述,"Rmi示例 Rmi代码示例"提供了一个基础的RMI应用框架,展示了如何创建、注册远程对象,以及如何在客户端进行调用。通过深入理解和实践这个示例,开发者能够更好地掌握RMI的核心概念和技术,为构建分布式...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像调用本地方法一样。RMI是构建分布式应用的重要工具,尤其适用于需要跨...
在"RMI实现代码动态下载"这个主题中,我们将会探讨如何利用RMI技术来动态地从服务器下载代码到客户端。 首先,让我们理解RMI的基本工作原理。RMI包含两个主要部分:远程接口(Remote Interface)和远程对象(Remote...
在这个“rmi client和server完整代码”中,我们将深入探讨RMI的工作原理以及如何构建一个简单的客户端和服务器。 一、RMI基本概念 1. 远程接口(Remote Interface):定义了客户端可以调用的远程方法。这些接口必须...
这个"一个简单的RMI例子Java源代码"是为了帮助开发者更好地理解和应用RMI。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:这是定义远程方法的Java接口。它声明了客户端可以调用的那些方法,这些方法...
5. `RMISSLSocketFactory.java`: 实现了SSL套接字工厂,提供了安全的远程通信。 6. `runserver.bat` 和 `runclient.bat`: 分别用于启动服务器和客户端的批处理文件。 7. `admin.html`: 可能是管理界面或者帮助文档。...
- **RMI的步骤**:创建远程接口,实现远程对象,导出远程对象,将远程对象注册到注册表,最后从客户端通过注册表获取远程对象引用并调用方法。 - **安全性**:RMI的安全性涉及SSL/TLS加密、数字签名以及访问控制,...
C++ Remote Method Invocation (RMI) 是一种在分布式系统中实现对象间远程调用的技术,它允许一个程序在一台计算机上执行操作,而这些操作实际上是在另一台计算机上的对象上进行的。C++ 并非原生支持RMI,但通过第三...
RMI(Remote Method Invocation,远程方法调用)是Java平台上的一个重要特性,它允许Java对象在不同的Java虚拟机(JVM)之间进行通信,从而实现分布式计算。在J2EE(Java 2 Platform, Enterprise Edition)环境中,...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于分布式计算的技术,它允许一个Java对象调用另一个在不同JVM上的对象的方法。这个“RMI基础代码小程序”很可能是为了演示如何使用RMI...
Java RPC和RMI代码实战,有关键注释,为最简案例。Maven搭建,JDK8编译。 RPC体验:依次运行RpcProvider和RpcConsumer类。 RMI体验:RMITest中依次运行testServer和testClient方法。
### RMI远程调用代码及使用方法 #### 一、RMI简介 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算技术,它允许开发人员在不同的Java虚拟机(JVM)之间进行对象的远程调用。通过...
**RMI(远程方法调用)是Java平台中一种用于分布式计算的技术,它允许一个Java对象在一台机器上执行另一个网络中的Java对象的方法。RMI是Java企业级应用开发的重要组成部分,尤其在构建分布式系统时非常有用。在这个...
RMI(Remote Method Invocation,远程方法调用)是Java中的一种技术,用于在分布式环境中实现对象间的通信。它允许一个Java对象调用另一个在不同 JVM(Java Virtual Machine)中的对象的方法,就像是在本地进行操作...
远程调用代码RMI技术,可是实现远程方法调用的代码
总的来说,RMI是Java中一种强大的分布式计算工具,它简化了远程对象的调用,使得开发者可以专注于业务逻辑,而无需关注底层通信的复杂性。通过理解RMI的基本原理和使用方法,开发者可以有效地构建和维护分布式系统。
当客户端尝试调用远程对象的一个方法时,如果该方法涉及到客户端尚未加载的类,RMI系统会尝试从服务器下载这些类。这个过程涉及到了Java的序列化和反序列化机制,以及`java.rmi.server.RMIClassLoader`类的作用。 1...
《RMI会议管理系统代码解析与应用》 远程方法调用(Remote Method Invocation,RMI)是Java编程语言中实现分布式计算的一种技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行通信,仿佛它们是在同一台机器上...