本文介绍的是使用JDK自带的RMI包,实现简单的远程方法调用功能,虽有众多局限,在生产环境上未必能用上,但对于理解原理是非常有好处的,请深刻理解。
说明:
1. 本文使用的是JDK1.6+的版本
2. 文中会使用到rmic功能,这个工具是在本地生成Stub和Skeleton的工具,在JAVA_HOME\bin文件中有自带,
若想使用,请在path环境变量中添加%JAVA_HOME%\bin 目的是将JAVA_HOME\bin下的命令添加到path变量中,
使得rmic命令在dos的任何目录下使用。
先上代码,服务端类:
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
/**
* UnicastRemoteObject 通过exportObject方法 将本实例export出去
* @author liuinsect
*
*/
public class SayHello extends UnicastRemoteObject implements SayHelloInterface {
//
protected SayHello() throws RemoteException {
super();
}
/**
* 序列化的标示
*/
private static final long serialVersionUID = 999999L;
/**
* 在服务端的具体方法
*/
@Override
public void sayHello() {
System.out.println(" hello ");
}
/**
* 在服务端的具体方法
*/
@Override
public void sayHelloT0(String name) {
System.out.println(" hello " + name);
}
}
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* 作为标示,说明该接口支持远程调用
* @author liuinsect
*
*/
public interface SayHelloInterface extends Remote {
public void sayHello( ) throws RemoteException;
public void sayHelloT0( String name) throws RemoteException;
}
import java.rmi.*;
/**
* 服务端,完成的是发布服务的功能
* @author liuinsect
*
*/
public class Server
{
public static void main(String[] args)
{
try
{
SayHelloInterface hello = new SayHello(); //实例化要发布的类
Naming.rebind("RMI_Hello", hello); //绑定RMI名称 进行发布,其实是将rmic生成的stub文件绑定待rmi registry中
System.out.println("=== Hello server Ready === ");
}
catch(Exception exception)
{
exception.printStackTrace();
}
}
}
客户端类:
import java.rmi.*;
/**
* 客户端类,调用远程服务
* @author liuinsect
*
*/
public class Client {
public static void main(String[] args) {
try
{
//在RIM registry中需找名为RMI_Hello的服务
SayHelloInterface say = (SayHelloInterface) Naming.lookup("rmi://127.0.0.1/RMI_Hello"); //通过RMI名称查找远程对象
say.sayHello(); //调用远程对象的方法 ,这个时候的对象是在本地用classloader load进stub后,反序列化SayHelloInterface对象生成的
say.sayHelloT0("jack "); //
} catch (Exception e)
{
e.printStackTrace();
}
}
}
编写好后,继续:
1. 在工程的bin文件下为SayHello.class生成stub类,即进入dos后cd到SayHello.class所在目录,
执行 rimc SayHello (注意,别加后缀)
2. 成功后,执行命令: rmiregistry 启动rmiregistry服务
3. 先运行server,再运行client 就可以了。。。
分享到:
相关推荐
实现java RMI 远程调用,包括 RMIServer RMIClient源码,测试用例。
三种方式实现java远程调用(rmi) 方式一:原始方式 方式二:spring 方式三:jndi 解压,放到myeclipse上可用
JAVA RMI远程调用方法代码 RMI 远程 java
最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程
rmi 远程方法调用 客户端
RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用
用java的rmi实现的 远程调用。希望对阁下有用
Java RMI远程方法调用详解-例子代码,例子详解在:http://blog.csdn.net/guyuealian/article/details/51992182
Java RMI远程方法调用的小Demo。详细:http://blog.csdn.net/u014375869/article/details/39344963
java rmi 实现远程调用服务的简单的例子。
RMI简单远程调用,实现数字相加!代码简单易懂
这个是基于C#的 RMI远程方法调用 这个是基于C#的 RMI远程方法调用这个是基于C#的 RMI远程方法调用
DISPLAYPERFECTTIME.JAVA|:向rmiregistry查找PerfectTime对象,定义调用远程对象的方法。 PERFECTTIME.JAVA:向RMI注册服务,以便客户端查找,创建提供注册服务的本地对象,参数为端口号,也可以在Dos窗口下,执行...
java rmi 远程方法调用 服务端
java jdk1.8;...掌握远程过程调用原理,基于java RMI进行远程编程和控制。要求定义远程接口类及实现类:定义相应的处理方法;客户端利用RMI实现远程调用服务。同时,在在两台机器之间验证结果正确。
源代码 博文链接:https://forchase.iteye.com/blog/1454428
Java RMI远程方法调用,简单明了,欢迎大家下载
rmi远程调用读取文件,以及各种简单的例子
RMI远程调用,之前做的Demo希望对大家有所帮助!
使用rmi实现远程调用 多个客户端 一个服务端对话