`
zhoucl
  • 浏览: 50030 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分布式程序设计——RMI简单示例

 
阅读更多

分布式程序设计现在用的地方可多了,但是自己一直没有去了解这方面的内容,今天兴致一来,就找了本书扫了一下盲,并且做了个简单的示例进行了实现,主要是通过java的RMI(Remote method Invoke)来做的,理论这里就不说了,直接从程序上稍作分析。

RMI应用程序编写步骤

1、定义一个Remote接口:(根据文件名称,读取文件内容)

public interface FileInterface extends Remote
{ 
    public String readFile(String fileName) throws RemoteException;
}

2、实现一个Remote接口

public class FileImpl extends UnicastRemoteObject implements FileInterface {
	
	protected FileImpl() throws RemoteException {
		super();
	}

	@Override
	public String readFile(String fileName) throws RemoteException {
		try {
			File file = new File(fileName);
			StringBuffer sbuffer = new StringBuffer();
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
			String str ="";
			while((str = br.readLine()) != null ) {
				sbuffer.append(str + "\n");
			}
			
			return sbuffer.toString();
		} catch (Exception e) {
			System.out.println("FileImpl.readFile(): " + e.getMessage());
			e.printStackTrace();
			return null;
		}
	}

}

3、编写Server端程序

public class FileServer {
	public static void main(String[] args) {
		int portNum = 9090;
		
		if(System.getSecurityManager() == null) {
			System.setSecurityManager(new RMISecurityManager());
		}
		
		try {
			LocateRegistry.createRegistry(portNum);
			FileInterface fi = new FileImpl();
			Naming.rebind("//127.0.0.1:" + portNum + "//FileServer", fi);
			System.out.println("Server Start...");
		} catch (Exception e) {
			System.out.println("FileServer: " + e.getMessage());
			e.printStackTrace();
		}
	}
}

4、编写Client端程序

public class FileClient {
	public static void main(String[] args) {
		if(args.length != 3) {
			System.out.println("Usage: java FileClient filename machinename port");
			System.exit(0);
		}
		
		try {
			String name = "//" + args[1] + ":" + args[2] +  "//FileServer";
			FileInterface fi = (FileInterface)Naming.lookup(name);
			String str = fi.readFile(args[0]);
			System.out.println(str);
		} catch (Exception e) {
			System.out.println("FileServer exception: " + e.getMessage());
			e.printStackTrace();
		}
	}
}

5、生成Stubs和Skeletons,启动服务端和客户端

由于在FileServer中使用的SecurityManager,因此自定义了一个security.policy文件,如下:

grant {
	permission java.security.AllPermission;
};

 执行过程,在源代码中存在于run.bat文件中:

javac org/clzps/distributed/FileInterface.java

javac org/clzps/distributed/FileImpl.java

rmic org.clzps.distributed.FileImpl

javac org/clzps/distributed/FileServer.java

javac org/clzps/distributed/FileClient.java

java -Djava.security.policy=org/clzps/distributed/security.policy org.clzps.distributed.FileServer

 

显示界面如下:


通过客户端访问如下:

java org.clzps.distributed.FileClient D:\Test.txt 127.0.0.1 9090,如下所示:


  • 大小: 71.8 KB
  • 大小: 15.5 KB
分享到:
评论

相关推荐

    CORBA与RMI的比较 及 实例

    标题 "CORBA与RMI的比较及实例" 涉及到的是两种分布式计算技术——Common Object Request Broker Architecture (CORBA) 和 Remote Method Invocation (RMI) 的对比以及实际应用的示例。这两种技术都是为了让运行在...

    Java RMI 用于远程调用 进行分布式开发

    Java RMI(Remote Method Invocation)是Java平台提供的一种实现分布式计算的技术,它允许开发者在不同JVM间进行方法调用,如同调用本地对象一样简单。通过RMI,开发者能够构建出强大的分布式应用程序。 #### Java ...

    Introduction to Java Distributed Objects - Using RMI and CORBA.pdf

    我们将探讨一家虚构公司——扭曲晶体管公司(Twisted Transistors, Inc.)面临的挑战以及他们如何通过技术手段解决分布式办公环境中的问题。 ### 分布式对象技术简介 接下来,我们将介绍分布式对象技术的基础知识,...

    java基础教程

    本教程分为多个部分,详细讲解了Java程序设计的核心要素。 首先,Java语言介绍部分会阐述Java的历史和发展,Java起源于Sun公司的Green项目,最初是为了创建一种用于家用电器的分布式代码系统。由于C++的复杂性和...

    JavaNetworkProgramming.pdf

    12. **远程方法调用(RMI)**:Java的RMI机制允许开发者创建分布式应用程序,实现在多个系统之间进行远程对象的调用。 #### 四、Java网络编程案例分析 - **HTTP客户端示例**:使用`java.net.HttpURLConnection`类...

    大数据课程体系.docx

    - **Zookeeper RMI高可用分布式集群开发**:指导如何使用Zookeeper实现RMI服务的高可用性。 - **Zookeeper Redis高可用监控实现**:说明如何利用Zookeeper实现Redis集群的高可用监控。 #### 九、Netty异步IO通信...

    java的入门教程

    面向对象的特性让Java的程序设计更加模块化和可复用。Java支持多线程,这使得可以同时执行多个任务,提高了程序的运行效率。Java虚拟机的垃圾回收机制能够自动释放不再使用的对象占用的内存,减少了内存泄漏的风险。...

    java毕业实习总结.doc

    Java 语言是一个纯的面向对象程序设计语言。 Java 语言的应用 Java 语言支持 inter 应用开发,在根本的 Java 应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括 URL、...

    利用java二次开发ug nx

    这段示例代码展示了如何创建一个简单的UG NX插件。首先,导入必要的`nxopen`包,然后在`main`方法中创建一个`Session`实例,并获取当前的工作部件`WorkPart`。接着,创建一个草图并添加一条直线。最后,显示一个简单...

    Ehcache使用文档

    - **分布式缓存**:可通过 RMI 或者插件 API 实现分布式缓存,提高系统的扩展性和可用性。 - **监听接口**:提供缓存和缓存管理器的监听接口,方便进行监控和调试。 - **多缓存管理器实例**:允许在同一应用中使用多...

    JAVA基础入门教程

    - **Hello World示例**:通过编写简单的“Hello World”程序来熟悉Java的基本语法和运行环境。 - **面向对象编程(OOP)**:Java是一种完全支持OOP特性的语言,理解类、对象、继承、封装、多态等概念对于学习Java至关...

    缓存技术详解

    它旨在提供一种简单有效的方法来减少应用程序对物理数据源的访问频率,从而提升应用程序的整体性能。 #### 二、Ehcache的主要特点 1. **快速**:Ehcache被设计为高速缓存系统,能够快速响应请求并高效地处理大量...

    J2EE的13种核心技术简介

    EJB是J2EE技术中最受瞩目的部分之一,原因是它提供了一个框架来开发和实现分布式商业逻辑,极大地简化了可扩展且高度复杂的大型企业级应用程序的开发。EJB规范定义了EJB组件何时以及如何与它们的容器交互,容器负责...

    RemoteComputationClient

    《远程计算客户端——Java技术深度解析》 在现代软件开发中,远程计算客户端扮演着至关重要的角色,尤其在分布式系统和云计算环境下。本篇将详细探讨"RemoteComputationClient"这一概念,它作为客户端示例,展示了...

Global site tag (gtag.js) - Google Analytics