远程调用之RMI技术
2024-10-20 04:02:23
---恢复内容开始---
RMI已经不是什么新的技术了,但是相对于webservice来说,rmi比较简单,比较适合一些小的应用,下面的helloword列子可以介绍rmi的相关技术
服务器端代码:
服务器接口实现Remote
package com.qcf.server; import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* 服务类
* 定义行为集
* @author Administrator
*
*/
public interface IHello extends Remote { //在服务器端打印客户端传过来的字符串并返回该字符串
public String sayHello(String str) throws RemoteException;
}
接口的实现类
package com.qcf.server; import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject; /**
* 服务器端实现类
* 需要继承UnicastRemoteObject
* @author Administrator
*
*/
public class IHelloImpl extends UnicastRemoteObject implements IHello{ //必须的
protected IHelloImpl() throws RemoteException {
super();
} @Override
public String sayHello(String str) throws RemoteException {
System.out.println("客户端传过来的字符串是:" + str);
return str;
} }
服务类启动服务类
package com.qcf.server; import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry; /**
* RMI服务器
* 1、创建一个服务
* 2、启动服务器
* 3、注册服务
* @author Administrator
*
*/
public class HelloServer { public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException {
//1、创建一个服务
IHello iHello=new IHelloImpl();
//2、启动服务器 启动一个注册表并把注册表绑定到一个端口(默认端口1099)
LocateRegistry.createRegistry(8189); //3将服务注册到注册表 绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)
Naming.bind("rmi://localhost:8189/ihello", iHello);
System.out.println("server start success!");
}
}
客户端类
创建接口类如上
客户端测试类
package com.qcf.client; import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException; /**
* 客户端测试类
* 服务器是谁 服务器
* 如何获取服务 查找
* 调用接口
* @author Administrator
*
*/
public class HelloClient {
public static void main(String[] args) throws Exception, Exception, Exception {
//查找服务
IHello hello=(IHello) Naming.lookup("rmi://localhost:8489/ihello");
//调用接口
String str=hello.sayHello("哈哈哈 。我测试成功了");
System.out.println("客户端"+str);
}
}
运行RMI服务端程序:
运行RMI客户端程序:
总结:
从上面的过程来看,RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。
这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。
RMI的局限性之二是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现。
---恢复内容结束---
最新文章
- G2 2.0 更灵活、更强大、更完备的可视化引擎!
- Linux 命令收集
- ASP.NET程序中 抛出";Thread was being aborted. ";异常(转)
- Linux IPC POSIX 消息队列
- 无线ap和路由器wifi热点怎么区分和区别
- PHP 设计模式 笔记与总结(11)观察者模式
- 自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()
- php基础知识【函数】(3)字符串string
- 块对象block小结(2)
- io 测试
- MVC Filter 实现方式和作用范围控制
- MIT Introduction to Computer Science and Programming (Lesson one )
- 关于.NET异常处理的思考(上)
- 浅谈C#中的斐波拉契数列
- CORS跨域 Ajax headers 问题
- paloalto防火墙激活许可证和订阅
- TopicsExtraction with NMF &; LDA
- Python—闭包
- 教你轻松快速学会用Calibre TXT转MOBI
- [docker]docker网络-直接路由模式
热门文章
- 飞信免费邮件api,飞信界面
- struts2和struts1认识
- Cocos2dx-3.1.1 冒险01----&;gt; 文件夹结构、新项目project创建并执行
- Cocos2d-X中实现批处理精灵
- 使用C#在Windows应用商店程序中获取CPU信息
- uva 10817 - Headmaster's Headache ( 状态压缩dp)
- mac系统连接android电话
- javascript中间preventDefault与stopPropagation角色介绍
- Docker简介(转)
- 基于VMware的虚拟Linux集群搭建-lvs+keepalived