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类。另外还可以检查一下是否正确设置的端口。
分享到:
相关推荐
其次,URL/RMI编程示例代码涉及到网络资源的访问和远程方法调用。URL(统一资源定位符)是访问互联网上的资源的地址,Java的java.net.URL类提供了打开、读取和连接URL的方法。RMI(Remote Method Invocation)允许...
本篇文章将通过一个简单的RMI示例,帮助你理解和掌握如何使用RMI进行分布式编程。 首先,理解RMI的基本概念是非常重要的。RMI允许Java对象作为远程对象暴露给其他Java应用程序,这些应用程序可以像调用本地对象一样...
三、Java RMI编程示例 1. 定义远程接口: ```java import java.rmi.Remote; import java.rmi.RemoteException; @Remote public interface MyRemoteInterface extends Remote { String doSomething(String input) ...
总结来说,Java RMI是Java为分布式编程提供的一种强大工具,通过简单的接口定义和实现,就能实现跨越网络的远程方法调用。理解并熟练运用RMI,能帮助开发者构建高效、可扩展的分布式系统。在“RMI简单示例 - Java ...
RMI的优势在于它提供了透明的远程调用,使得开发者可以像调用本地对象一样调用远程对象,极大地简化了分布式编程。然而,RMI也有其局限性,如不支持异步调用,性能可能受网络延迟影响等。在实际应用中,根据项目需求...
在给定的代码示例中,我们看到了一个简单的RMI应用,包含三个主要部分:远程接口、远程接口的实现以及客户端。 1. **远程接口**: - `RMITest2I`是定义了远程方法的接口,其中有两个方法:`registerClient`和`...
### JDK5新版RMI编程指南 #### RMI简介与发展历程 RMI(Remote Method Invocation),即远程方法调用,是一种允许在不同的Java虚拟机(JVM)之间进行远程调用的技术。它是Java平台上最早的远程访问技术之一,为...
8. 输入ant -f build-rmi-client.xml可以看到第一个RMI示例演示成功。 注:需要把RegisterRocket.java和ShowRocketClient.java文档中的计算名和IP改成你自己机器的名称或IP。 问题:第一次运行成功,但是如果关掉...
在IT领域,远程方法调用(Remote Method ...通过研究和理解这个示例代码,你将能够将RMI集成到自己的VC++项目中,实现跨网络的分布式系统。这不仅可以提高程序的可扩展性,还能让你的程序具备更高的灵活性和可靠性。
RMI(Remote Method Invocation,远程方法调用)是Java平台上的一个核心特性,它允许Java对象在不同的JVM(Java虚拟机...结合电子版教程,学习者可以更全面、深入地掌握RMI的相关知识,提升自己的Java分布式编程能力。
这个示例展示了Java RMI-IIOP如何在分布式环境中实现对象间的交互,这对于大型企业级应用或者需要跨网络通信的系统来说非常有用。通过学习和实践这个示例,开发者可以更好地理解和掌握Java RMI-IIOP的原理,提升在...
在Java编程中,RMI允许一个对象在某一个Java虚拟机(JVM)上执行另一个JVM上的对象的方法,从而打破了传统的进程间通信的限制。RMI在企业级应用、网络服务以及多节点协作计算等领域有着广泛的应用。 标题"RMI.rar_...
### RMI编程 #### 定义远程接口 在实现RMI之前,首先需要定义一个远程接口。这个接口必须继承自`java.rmi.Remote`接口,并且声明所有可能被远程调用的方法。这些方法必须抛出`java.rmi.RemoteException`异常。 ##...
在这个基于Java的C/S(客户端/服务器)编程实验中,我们将探讨两种不同的实现方式:基于Socket的通信和基于Java Remote Method Invocation (RMI) 的通信。 首先,我们来看基于Socket的C/S编程。Socket是网络编程的...
远程方法调用(Remote Method Invocation,RMI)是Java平台上的一个核心特性,它允许Java对象在不同的JVM(Java虚拟机)之间进行交互。...因此,掌握RMI对于提升你的Java编程技能和理解分布式系统的设计至关重要。
RMI是Java网络编程的重要组成部分,使得开发分布式应用程序变得更加简单。本文档详细介绍了RMI的使用方法和工作机制,并配以丰富的实例进行讲解。 1. **RMI基本概念** - **远程对象**:在远程服务器上的对象,可以...
2. 示例程序:展示了RMI-IIOP的实际应用,包括客户端和服务端的代码示例,帮助初学者理解工作流程。 3. 集成文档:可能包含了如何将RMI与Spring框架整合的教程,指导开发者如何在Spring环境中使用RMI-IIOP实现服务的...
"RMI基础教程 - 深海有约 - BlogJava.files"和"rmi入门教程,简单明了(转).files"可能包含了相关的源代码或者图片资源,帮助读者更好地理解和实践RMI编程。 通过深入阅读这些资料,你可以了解如何设置RMI环境,...