`

Java RMI 例子 和一些常见问题

 
阅读更多


看到设计模式代理模式时,有个RMI的例子,虽然概念上比较简单,但是自己动手写个例子验证一下。 

依然是经典的 hello world,呵呵。


首先是一个客户端和服务端都需要的接口。

import java.rmi.*;

public interface MyRemote extends Remote {
String sayHello() throws RemoteException;
}


然后是一个接口的实现类。

 

import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.LocateRegistry;

public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {

	public String sayHello() {
		return "Server says, 'Hey, Connected!'";
	}
	
	public MyRemoteImpl() throws RemoteException {}
	
	public static void main(String[] args) {
		try {
			LocateRegistry.createRegistry(9998);
			
			MyRemote service = new MyRemoteImpl();
			Naming.rebind("RemoteHello", service);
			System.out.println(service + " successfully bound to RemoteHello");
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	
	}
}

 

最后是一个客户端调用类。

 

 

import java.rmi.*;

public class Client {
	public static void main(String[] args) {
		new Client().go();
	}
	
	public void go() {
		try {
			MyRemote service = (MyRemote) Naming.lookup("rmi://192.168.1.107:9998/RemoteHello");
			String s = service.sayHello();
			
			System.out.println(s);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

}

 
总共就这3个类。



编译:

进入java文件所在目录:

C:\Users\Administrator\Desktop\rmiExample>javac *.java

目录大概这个样子:

Client.class
Client.java
MyRemote.class
MyRemote.java
MyRemoteImpl.class
MyRemoteImpl.java

再使用rmic生成stub和skeleton类,注意加上-v1.1,不然不会生成skel类。

C:\Users\Administrator\Desktop\rmiExample>rmic -v1.1 MyRemoteImpl

生成如下2个文件
MyRemoteImpl_Skel.class
MyRemoteImpl_Stub.class

把如下类拷到另一台电脑上运行服务器端,也要有Java环境。

MyRemote.class
MyRemoteImpl.class
MyRemoteImpl_Skel.class
MyRemoteImpl_Stub.class

本机留着当作客户端机器,只保留如下3个文件,其余全部删掉。
Client.class
MyRemote.class
MyRemoteImpl_Stub.class

在服务器端电脑运行
java MyRemoteImpl

这一步如果注释掉MyRemoteImpl类的这一行,

 

// LocateRegistry.createRegistry(9998);

需要先开一个命令终端运行

rmiregistry 9998

再运行
java MyRemoteImpl

最后,见证测试结果的时候到了,在本机(作为客户端机器)运行
java Client
如果出现打印的
Server says, 'Hey, Connected. Ready to use.'

表示运行成功。而且本地没有MyRemoteImpl类,可以肯定这个结果是服务器机器上返回的结果。

 

 

分享到:
评论

相关推荐

    JavaRMI.pdf

    总之,Java RMI是Java平台中用于实现远程方法调用的关键技术,它通过接口抽象和序列化实现了客户端和服务器之间的无缝通信。通过理解和熟练掌握RMI,开发者可以构建高效、可扩展的分布式应用程序。

    java rmi 简单易懂的实例

    这些文档可能包括步骤指南、配置示例和常见问题解答。 6. **环境设置**:使用Java RMI还需要设置JVM的RMI端口、注册表端口等。通常,这可以通过设置`JAVA_OPTS`环境变量或者在启动脚本中指定`-D`选项来完成。 通过...

    java中的RMI程序

    5. **通信与序列化**:RMI使用Java的序列化机制将方法调用和参数转换为字节流,通过网络发送到远程对象,再将结果反序列化回对象。 现在,我们引入了“简单的加密技术”。在RMI中使用加密可以提高数据传输的安全性...

    java spring+rmi 的远程调用例子

    Java Spring与RMI(Remote Method Invocation)的整合是企业级应用中常见的远程服务交互方式。Spring框架提供了对RMI的支持,使得开发者能够方便地在分布式环境中进行服务的调用。这个压缩包文件“Spring+RMI”很...

    rmi远程调用读取文件

    RMI(Remote Method Invocation,远程方法调用)是Java平台上的一个核心特性,它允许Java对象在不同的JVM之间进行通信,实现分布式计算。在这个场景中,“rmi远程调用读取文件”指的是通过RMI机制,使得一个JVM中的...

    rmi入门

    7. **实战应用**:可能包含一些实际项目中使用RMI的例子,比如构建分布式数据库系统或网络服务。 8. **扩展技术**:可能提及了与RMI相关的其他技术,如Java RMI-IIOP(与CORBA的集成),或者Jini等。 9. **最佳实践*...

    Rmi.zip_The Beginners

    6. **异常处理**:`RemoteException`是RMI中最常见的异常,需要正确地捕获和处理。 7. **运行与调试**:如何在本地或者跨网络环境中运行和测试RMI应用,包括设置必要的环境变量(如`JAVA_HOME`和`RMIREGISTRY_PORT`...

    Java反序列化漏洞利用工具的实现.pdf

    这个组件提供了许多解决编程中常见问题的工具类,但由于它对集合的操作可以进行反射调用,且ObjectInputStream在反序列化时未能对生成对象的类型进行严格限制或校验,因此可被攻击者利用来执行任意代码。工具通过...

    [毕设论文模板例子]JAVA文件传输.doc

    Java 语言支持分布式编程,通过RMI(Remote Method Invocation,远程方法调用)、Socket 编程等技术,可以实现分布式系统的开发。 输入/输出流概念 输入/输出流是指在计算机中处理数据的基本操作。Java 语言提供了...

    Java服务器程序设计

    全书从java服务器的体系结构、开发工具和管理工具、编程技术、安全机制等四个方面全面介绍java服务器的升友技术。通过阅读本书,读者不仅能够知道用java服务器体系结构开发servlet与用传统cgi编写程序的好处,而且还...

    《EJB3.0实例子教程》jar包2

    《EJB3.0实例子教程》jar包2包含了多个重要的Java库文件,这些文件对于理解和实践企业级JavaBeans(EJB)3.0技术至关重要。EJB是Java平台企业版(Java EE)的一部分,主要用于构建可扩展、分布式、安全且事务处理...

    dubbo调用的例子

    通过这个简单的Dubbo调用例子,我们可以看到Dubbo如何帮助我们构建分布式的微服务架构,实现服务的解耦、高可用和可扩展性。在实际项目中,还需要考虑更多的细节,如负载均衡、容错机制、性能优化等,以确保系统的...

    简单的java socket源码

    虽然本实例主要关注Socket,但如果你有RMI的背景,理解这个Socket例子可能会更容易,因为它们都是Java中实现网络通信的方式,只是RMI提供了更高层次的抽象。 总的来说,这个简单的Java Socket源码实例可以帮助我们...

    JAVA毕业设计论文题目大全.pdf

    9. **宾馆客房管理系统**和**房地产信息管理系统**等业务管理系统,是实际应用Java技术解决行业问题的例子。 JSP 类论文题目则更多地侧重于Web应用的开发: 1. **网上书店**和**网上购物系统**:涉及B/S架构,使用...

    java.util.concurrent.ExecutionException 问题解决方法

    `java.util.concurrent.ExecutionException` 是Java并发编程中一个常见的异常,通常在执行Future对象的get()方法时抛出。这个异常表明在异步任务的执行过程中发生了异常。当我们使用ExecutorService提交任务并尝试...

    超爽的自学课件(java)

    也讲述了与Java 1.1的“Java数据库连接”(JDBC)和“远程方法调用”(RMI)有关的问题。 <br>(16) 第16章 设计范式 本章将讨论非常重要、但同时也是非传统的“范式”程序设计概念。大家会学习设计进展过程的...

    Java程序员面试宝典

    ### Java程序员面试宝典知识点详解 #### 一、面向对象的四大特征 1. **抽象** - **定义**:抽象是指在设计阶段...以上内容涵盖了Java面试中较为常见的知识点,对于准备面试的Java程序员来说是非常有价值的参考资料。

Global site tag (gtag.js) - Google Analytics