---恢复内容开始---

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)来实现。

---恢复内容结束---

最新文章

  1. G2 2.0 更灵活、更强大、更完备的可视化引擎!
  2. Linux 命令收集
  3. ASP.NET程序中 抛出"Thread was being aborted. "异常(转)
  4. Linux IPC POSIX 消息队列
  5. 无线ap和路由器wifi热点怎么区分和区别
  6. PHP 设计模式 笔记与总结(11)观察者模式
  7. 自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()
  8. php基础知识【函数】(3)字符串string
  9. 块对象block小结(2)
  10. io 测试
  11. MVC Filter 实现方式和作用范围控制
  12. MIT Introduction to Computer Science and Programming (Lesson one )
  13. 关于.NET异常处理的思考(上)
  14. 浅谈C#中的斐波拉契数列
  15. CORS跨域 Ajax headers 问题
  16. paloalto防火墙激活许可证和订阅
  17. TopicsExtraction with NMF & LDA
  18. Python—闭包
  19. 教你轻松快速学会用Calibre TXT转MOBI
  20. [docker]docker网络-直接路由模式

热门文章

  1. 飞信免费邮件api,飞信界面
  2. struts2和struts1认识
  3. Cocos2dx-3.1.1 冒险01----> 文件夹结构、新项目project创建并执行
  4. Cocos2d-X中实现批处理精灵
  5. 使用C#在Windows应用商店程序中获取CPU信息
  6. uva 10817 - Headmaster's Headache ( 状态压缩dp)
  7. mac系统连接android电话
  8. javascript中间preventDefault与stopPropagation角色介绍
  9. Docker简介(转)
  10. 基于VMware的虚拟Linux集群搭建-lvs+keepalived