Java RMI 远程方法调用Remote Method Invocation

转载:http://www.cnblogs.com/yangchongxing/p/9078061.html

1、创建远程方法接口(必须继承自java.rmi.Remote接口)

package cn.ycx.date;

import java.rmi.Remote;
import java.rmi.RemoteException; public interface DateRemote extends Remote {
public String now() throws RemoteException;
}

2、创建远程服务实现

远程对象必须实现java.rmi.server.UniCastRemoteObject类,该类的构造函数中将生成stub(存根)和skeleton(骨架), 这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为Stub(存根),而服务器端本身已存在的远程对象则称之为Skeleton(骨架)。其实此时的存根是客户端的一个代理,用于与服务器端的通信,  而骨架也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。

package cn.ycx.server;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.text.SimpleDateFormat;
import java.util.Date; import cn.ycx.date.DateRemote; public class DateRemoteImpl extends UnicastRemoteObject implements DateRemote {
private static final long serialVersionUID = -4892445365627614558L;
protected DateRemoteImpl() throws RemoteException {
super();
}
@Override
public String now() throws RemoteException {
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
return format.format(new Date());
}
}

3、启动远程服务

package cn.ycx.server;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
// java cn.ycx.server.ServerTest
public class ServerTest {
//rmiregistry
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.createRegistry(1099);
registry.bind("dateRemote", new DateRemoteImpl());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("RMI Server is ready...");
}
}

4、创建客户端实现

package cn.ycx.client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException; import cn.ycx.date.DateRemote; // java -jar client.jar
public class ClientTest { public static void main(String[] args) {
DateRemote dateRemote;
try {
dateRemote = (DateRemote) Naming.lookup("rmi://192.168.1.190:1099/dateRemote");//
System.out.println(dateRemote.now());
} catch (MalformedURLException e) {
} catch (RemoteException e) {
} catch (NotBoundException e) {
}
}
}

导出为可执行jar

java -jar client.jar

运行结果:2018-05-23 17:26:58

【Java Web开发学习】远程方法调用RMI的更多相关文章

  1. 【Java Web开发学习】Spring发布RMI服务

    [Java 远程服务]Spring发布RMI服务 转载:https://www.cnblogs.com/yangchongxing/p/9084066.html RmiServiceExporter可 ...

  2. 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor

    [Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...

  3. 【Java Web开发学习】Spring MVC 使用HTTP信息转换器

    [Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...

  4. 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener

    [Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...

  5. 【Java Web开发学习】Spring MVC文件上传

    [Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...

  6. 【Java Web开发学习】Spring MVC异常统一处理

    [Java Web开发学习]Spring MVC异常统一处理 文采有限,若有错误,欢迎留言指正. 转载:https://www.cnblogs.com/yangchongxing/p/9271900. ...

  7. 【Java Web开发学习】Spring4条件化的bean

    [Java Web开发学习]Spring4条件化的bean 转载:https://www.cnblogs.com/yangchongxing/p/9071960.html Spring4引入了@Con ...

  8. 【Java Web开发学习】Spring环境profile

    [Java Web开发学习]Spring 环境profile 转载:http://www.cnblogs.com/yangchongxing/p/8890702.html 开发.测试.生产环境往往是不 ...

  9. 【Java Web开发学习】跨域请求

    [Java Web开发学习]跨域请求 ================================================= 1.使用jsonp ===================== ...

  10. 【Java Web开发学习】Spring JPA

    [Java Web开发学习]Spring JPA 转载:https://www.cnblogs.com/yangchongxing/p/10082864.html 1.使用容器管理类型的JPA JND ...

随机推荐

  1. LXC容器文件系统设计优化

    在HOST上面,一个LXC container包含一个config文件和一个rootfs目录. 早期我们在交叉编译系统上编译出container的rootfs之后,直接在编译系统上将其用tar压缩打包 ...

  2. 【Linux系列】Centos 7安装 Nginx(三)

    目的 为了下面的Laravel部署,本篇开始安装Nignx服务器. 防火墙设置 在物理主机上查看nginx是否安装成功,需要开放虚拟机的80端口. 用cmder登录到虚拟机 firewall-cmd ...

  3. Flutter高仿微信项目开源-具即时通讯IM功能

    项目地址:https://github.com/fluttercandies/wechat_flutter wechat_flutter  Flutter版本微信 效果图: 下载体验(Android) ...

  4. Receptive Field Block Net for Accurate and Fast Object Detection

    Receptive Field Block Net for Accurate and Fast Object Detection 作者:Songtao Liu, Di Huang*, and Yunh ...

  5. 小白学 Python 爬虫(7):HTTP 基础

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  6. (一)OpenStack---M版---双节点搭建---基础环境配置

    ↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 配置如下 本次搭建采用2台4核4G的虚拟机,也可以用2台2核4G 主机名 配置 网络 Contr ...

  7. Git使用和介绍-基础指令

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52210625 本文出自: [HansChen的博客] 查看已有配置 取消已有的配置 ...

  8. 深入浅出Spring(二)

    IoC概念 控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题. 它还有一个名字叫做依赖注入(Dependency Injection).Io ...

  9. python排序算法之一:冒泡排序(及其优化)

    相信冒泡排序已经被大家所熟知,今天看了一篇文章,大致是说在面试时end在了冒泡排序上,主要原因是不能给出冒泡排序的优化. 所以,今天就写一下python的冒泡排序算法,以及给出一个相应的优化.OK,前 ...

  10. Linux下利用nginx实现负载均衡

    linux下利用nginx实现负载均衡 前提条件: 1,安装好jdk 2,安装好tomcat和nginx(可以参考我前两篇文章) 满足前提条件后,要用nginx实现负载均衡,主要是靠配置nginx的配 ...