关闭

RMI编程示例

769人阅读 评论(0) 收藏 举报

1.首先编写客户端和服务端以及算法的代码。代码如下:

(1)接口代码

package com.wonder.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

public interface RMIOperate extends Remote {
 public double add(double x,double y) throws RemoteException;
 public double minus(double x,double y) throws RemoteException;
 public double add(List l) throws RemoteException;
}

(2)接口的算法实现

package com.wonder.rmi.server;

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

import com.wonder.rmi.RMIOperate;

public class OperateImpl extends UnicastRemoteObject implements RMIOperate {

 public OperateImpl() throws RemoteException {
  super();
 }

 /**
  *
  */
 private static final long serialVersionUID = 1L;

 public double add(double x, double y) throws RemoteException {
  double z=x+y;
  return z;
 }

 public double minus(double x, double y) throws RemoteException {
  double z=x-y;
  return z;
 }

 public double add(List l) throws RemoteException {
 
  return Double.parseDouble(String.valueOf((Double)l.get(0) + (Double)l.get(1)));
 }

}
(3)server端程序

package com.wonder.rmi.server;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;


public class RMIServer {

 /**
  * @param args
  */
 public static void main(String[] args) {
  try {
   OperateImpl o = new OperateImpl();
   System.out.println("Server is Starting...");
   LocateRegistry.createRegistry(7099);  // 这个端口应该和绑定的端口一样,如果不指定,默认的端口是1099
   Naming.rebind("rmi://192.168.71.214:7099/RMIOperate",o);  // 这个端口和上面的端口一样
   System.out.println("Waiting RMI client Invoke ...");
  } catch (RemoteException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

}


2.客户端程序

package com.wonder.rmi.client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ArrayList;
import java.util.List;

import com.wonder.rmi.RMIOperate;

public class RMIClient {

 /**
  * @param args
  */
 @SuppressWarnings({"unchecked","unchecked"})
 public static void main(String[] args) {
  String host = "192.168.71.214";
  try {
   // 调用方式1
   Registry reg = null;
   reg = LocateRegistry.getRegistry("192.168.71.214",7099);
   RMIOperate rmiObj = (RMIOperate) reg.lookup("RMIOperate");
  
   // 调用方式2
   RMIOperate rmiObj1 = (RMIOperate) Naming.lookup("rmi://192.168.71.214:7099/RMIOperate"); //要查找远程服务器的端口

   double x = 1;
   double y = 2;
   List l = new ArrayList(2);
   l.add(0,Double.valueOf("123"));
   l.add(1,Double.valueOf("456"));
  
   double z = rmiObj.add(x,y);
   System.out.println("add="+z);
   double w = rmiObj.minus(x,y);
   System.out.println("minus="+w);
   double _a = rmiObj.add(l);
   System.out.println("add list="+_a);
  } catch (RemoteException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NotBoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

}


3.生成stub

c:/> java weblogic.rmic com.wonder.rmi.server.OperateImpl

为了方便测试,打成jar包,放入到startWebLogic.cmd的路径中

4.如果是在代码中调用了LocateRegistry,则不用在命令提示符窗口启动rmregistry命令

5.设置weblogic的启动类,com.wonder.rmi.server.RMIServer。启动weblogic不出错误就可以了。

二。常见的问题

1.如果是出现连接拒绝的问题,检查rmi注册是否正常启动。并且绑定的地址以及端口正确。

2.如果出现找不到stub类的情况,请检查是否使用rmic生成了相应的stub类。另外还可以检查一下是否正确设置的端口。 

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

RMI执行过程分析

RMI执行过程分析
  • u012358984
  • u012358984
  • 2015-08-05 00:32
  • 1420

Eclipse 里面 用RMI 插件来编写 RMI server and client的实际例子

下面是通过一个实际例子来演示如何在Eclipse中安装RMI插件来编写RMIclient/server. 1) 下载RMI 插件到eclipse (luna R4.4.1) 从下面链接下载net.genady.rmi_2.5.1.zip http://www.genady.net/rm...
  • bigtree_3721
  • bigtree_3721
  • 2016-01-31 20:18
  • 873

浅谈RMI - 搭建一个简单的RMI程序

RMI是Remote Method Invoke的缩写,是JDK提供的一个完善的、简单易用的远程调用框架,它要求客户端和服务器端都是Java程序。下面简述RMI的基本原理:如下图所示,RMI采用代理来负责客户端和服务器之间socket通信的细节。RMI框架分别为远程对象生成了客户端代理和服务器代理,...
  • xiaoyaoyulinger
  • xiaoyaoyulinger
  • 2016-05-19 11:50
  • 2268

eclipse中RMI编程环境的搭建与编程示例

在eclipse中进行远程方法调用(Remote Method Invocation RMI)编程 一、安装RMI插件 1、首先下载Eclipse的RMI开发插件 下载地址:http://www.genady.net/rmi/v20/downloads.html
  • hhxin635612026
  • hhxin635612026
  • 2013-05-12 17:43
  • 1856

java RMI远程方法调用详解

RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用,由于J2E...
  • jzhf2012
  • jzhf2012
  • 2013-01-07 14:43
  • 3414

Java RMI之HelloWorld程序以及相关的安全管理器的知识

Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。 Java RMI不是什么新技术(在Java1.1的时代都有了)...
  • wjrong_1
  • wjrong_1
  • 2015-07-22 16:38
  • 1470

java RMI原理详解

定义 RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。 Java RMI:Java远程方法调...
  • xinghun_4
  • xinghun_4
  • 2015-05-17 19:16
  • 7643

RMI和socket详解

详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp58   一般来说,基于CS(client-server)软件架构的开发技术有很多种。比较常用的有:基于socket的网络编程、RPC、基于Java技术的RMI...
  • yemou_blog
  • yemou_blog
  • 2015-12-14 11:17
  • 594

java rmi服务器端客户端传输数据实例教程

java rmi服务器端客户端传输数据实例教程 java代码下载地址:http://www.zuidaima.com/share/1550463269620736.htm
  • yaerfeng
  • yaerfeng
  • 2014-07-19 10:56
  • 4246

远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.methodname”形式。优点是跨语言跨平台,C端、S端有更大的独立性,缺点是不支...
  • shan9liang
  • shan9liang
  • 2013-06-04 10:31
  • 67668
    个人资料
    • 访问:439472次
    • 积分:4754
    • 等级:
    • 排名:第7068名
    • 原创:72篇
    • 转载:121篇
    • 译文:2篇
    • 评论:39条
    最新评论
    友情链接