java RMI(java远程方法调用实例解析)

原创 2011年10月15日 11:24:09
在 Java 中,远程对象是实现远程接口的类的实例, 远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。 
远程接口具有如下特点: 
1) 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。 
2) 远程接口必须扩展接口java.rmi.Remote。 
3) 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或RemoteException 的父类)。 

4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。  


例如:

1)创建远程接口TestRemote.java,源代码如下:

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface TestRemote extends Remote {
public int add(int a, int b) throws RemoteException;   
}

2)创建远程接口的实现类TestRemoteImpl.java,源代码如下:

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class TestRemoteImpl extends UnicastRemoteObject implements TestRemote {
protected TestRemoteImpl() throws RemoteException {
super();
}

public int add(int a, int b) throws RemoteException {
return a+b;
}
}

3)编写服务器端代码Server.java,源代码如下:

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

public class Server {   
    public static void main(String[] args) throws Exception {   
        try {   
         LocateRegistry.createRegistry(8808) ;
            // 创建远程对象   
            TestRemote testRemote = new TestRemoteImpl();   
            // 奖名称绑定到对象   
            Naming.rebind("rmi://localhost:8808/server", testRemote);   
            System.out.println("RMI服务器正在运行。。。。。。");   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }   
}  


4)编写客户端代码 Client.java,源代码如下:

import java.rmi.Naming;

public class Client {
public static void main(String[] args) {
try {   
            String url = "rmi://localhost:8808/server";   
            TestRemote RmiObject = (TestRemote)Naming.lookup(url);   
            System.out.println(" 1 + 2 = " + RmiObject.add(1, 2) );   
         } catch (Exception exc) {   
             System.out.println("Error in lookup: " + exc.toString());   
         } 
}
}

5)编译源代码:

javac Server.java

javac Client.java

6)为远程对象实现创建根和干:  

要创建存根程序和骨架文件,应以包含远程对象实现的已编译类包全名运行 rmic 编译器。   

存根(Stub)是远程对象在客户端的代理,它将RMI调用传递给服务器端的骨架(Skeleton),后者负责将该调用传递给实际的远程方法,

输入如下:   

rmic -d E:\rmi TestRemoteImpl 

其中;E:\rmi是代码保存的位置。

7)运行服务器端程序和客户端程序:

java Server

java Client


Java图表:JFreeChart实例

-
  • 1970年01月01日 08:00

java的远程方法调用

1,前言         前段时间我从昆明搬家到成都,突然想起还有一个文件落在了昆明,这个文件很重要,该怎么办呢。当然我会不假思索的赶快联系在昆明的朋友,让这个朋友帮我拿到文件,再帮我邮寄过来。本来...
  • mamy010
  • mamy010
  • 2012-06-27 20:43:18
  • 1067

Java RMI远程方法调用详解-例子代码

  • 2016年07月22日 17:24
  • 16KB
  • 下载

Java RMI远程方法调用详解

远程方法调用RMI(Remote Method Invocation),是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进...
  • guyuealian
  • guyuealian
  • 2016-07-22 17:45:43
  • 11614

RMI - Java远程方法调用

一、入门篇 Java RMI指的是远程方法调用(Remote Method Invocation). 它是一种机制, 能够让不同操作系统之间程序实现方法调用.  比如: 一个EJB可以通过RMI调...
  • zdp072
  • zdp072
  • 2014-05-22 23:56:31
  • 2151

Java RMI服务远程命令执行利用

-------------------------------------------------------------- 很长时间没更新博客了,今天来一发。 -------------------...
  • u011721501
  • u011721501
  • 2016-02-23 19:32:44
  • 10708

Java之RMI(远程方法调用)

RMI(Remote Method Invocation)中文名称是远程方法调用,可用于分布式计算。 这里就不去详细介绍RMI了,本Blog主要讲叙RMI实战和有哪些需要注意的地方,如果想要查看详细...
  • u012643122
  • u012643122
  • 2015-06-14 12:28:11
  • 1223

Java学习笔记之RMI远程方法调用

RMI 应用通常有两个分开的程序组成,一个服务端程序和一个客户端程序。一个典型的服务端程序创建一些远程对象,使得对这些远程对象的引用可以被访问,等待客户端调用这些远程对象提供的方法。一个典型的客户端程...
  • u014349086
  • u014349086
  • 2016-06-11 15:11:56
  • 2238

Java的RMI远程方法调用实现和应用

https://yq.aliyun.com/articles/38439 最近在学习Dubbo,RMI是很重要的底层机制,RMI(Remote Method Invocation)远程方法调...
  • u012506661
  • u012506661
  • 2017-02-19 21:34:47
  • 903

Java之——RMI远程过程调用(插曲)

一、定义          Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用...
  • l1028386804
  • l1028386804
  • 2015-05-25 16:58:37
  • 1619
收藏助手
不良信息举报
您举报文章:java RMI(java远程方法调用实例解析)
举报原因:
原因补充:

(最多只允许输入30个字)