专栏首页Linux技术资源分享JavaRMI Of Linux and Window

JavaRMI Of Linux and Window

RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.2中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。


以下用一个最简单的示例来介绍RMI的应用

CircleInterface    -------服务器接口类

Circle                  -------- 服务器类 

CircleServer       ---------服务器主类

TestCircle           --------测试类


packagecom.same.demo03;

importjava.rmi.Remote;

importjava.rmi.RemoteException;

/**

*服务器接口

* Created by alic on 16-3-7.

*/

public interfaceCircleInterfaceextendsRemote {

public doublecircleArea(Double r)throwsRemoteException;

}


packagecom.same.demo03;

importjava.rmi.RemoteException;

importjava.rmi.server.UnicastRemoteObject;

/**

*服务器类

* Created by alic on 16-3-7.

*/

public classCircleextendsUnicastRemoteObjectimplementsCircleInterface {

protectedCircle()throwsRemoteException {

super();

}

@Override

public doublecircleArea(Double r)throwsRemoteException {

return3.14*r*r;

}

}


packagecom.same.demo03;

importjava.net.MalformedURLException;

importjava.rmi.AlreadyBoundException;

importjava.rmi.Naming;

importjava.rmi.RemoteException;

/**

*服务器主类

* Created by alic on 16-3-7.

*/

public classCircleServer {

public static voidmain(String[] args) {

try{

Circle circle =newCircle();

//通过rmi设置并绑定服务器端口

Naming.bind("rmi://localhost:1099/circle",circle);

System.out.println("CircleServer is ok");

}catch(RemoteException e) {

e.printStackTrace();

}catch(MalformedURLExceptione) {

e.printStackTrace();

}catch(AlreadyBoundException e) {

e.printStackTrace();

}

}

}


packagecom.same.demo03;

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.rmi.Naming;

importjava.rmi.NotBoundException;

/**

*测试类

* Created by alic on 16-3-7.

*/

public classTestCircle {

public static voidmain(String[] args)throwsIOException, NotBoundException {

//连接服务器段的emi端口

CircleInterface circleInterface = (CircleInterface) Naming.lookup("rmi://localhost:1099/circle");

System.out.println("请输入半径:");

//创建输入流

BufferedReader bufferedReader =newBufferedReader(newInputStreamReader(System.in));

//将键盘输入的转换为Double类型

Double radii = Double.parseDouble(bufferedReader.readLine());

//接收通过服务器接口访问服务器计算的结果

System.out.println(circleInterface.circleArea(radii));

}

}


1、编写远程接口并编译   

2、编写实现接口的服务器类并编译

3、使用rmic编译生成stub和skeleton,命令格式:

rmic -v1.2  服务器类名

4、编写服务器主类并编译

5、编写客户端类并编译

6、启动注册库命令:

Window下 : start rmiregistry 1099 Linux下:rmiregistry 1099

7、运行服务主类:      java  服务器主类名

8、再重新启动一个命令行窗口,运行客户类: java  客户端类名

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 爬虫 | 继Helloworld程序 『scrapy & redis』

    AlicFeng
  • Linux之expect交互语言命令

    AlicFeng
  • oracle常用基础命令创建表多字段组合主键约束查看表的主键名称 注意大写禁用开启主键约束删除约束等效上面

    AlicFeng
  • 手机厂商年底冲销量,降价和新品你战哪一队?

    12月对于每个企业来说都是“冲刺月”,做收入、花预算、冲销量。手机行业表现得更加突出——手机公司各出奇招,发起最后冲刺。一个显著的表现是11月手机发布会扎堆,一...

    罗超频道
  • 架构设计--互联网架构演化

    我们常见的大型网站,如百度、淘宝、京东等,都是一个分布式系统。这么复杂的系统也不是一天建成的,每个系统都经历了漫长的演变过程。

    爱敲代码的猫
  • Python基础之变量和变量实现的简单乘

    上篇我们知道了关于python的一个hello world的简单程序代码,现在我们来了解关于python里面的变量,我们来了解下,变量是什么?

    py3study
  • redis实现消息队列

    消息队列一般都会想到kafka,rabbitmq,Rockermq, 其实,给你印像做缓存的Redis也是能做消息队列.

    星痕
  • django 数据库建表流程,与表结构

    郭楷丰
  • Springcloud之zuul的zuulFilter

    Springcloud的版本是Greenwich.SR2,Springboot版本是2.1.6.release.

    克虏伯
  • 不止苹果,科技公司为什么扎堆儿进军影视?

    在11月18日到19日举行的Code Media大会上,根据独立市场研究公司Moffett Nathanson的数据调查显示,2019财年,美国前10大娱乐投资...

    大数据文摘

扫码关注云+社区

领取腾讯云代金券