RMI远程方法调用的简单方法和实例

使用RMI建立一个分布式应用程序六步骤:

1. 定义一个远程接口。 java

2. 实现远程接口和服务器。 安全

3. 使用远程接口开发一个客户程序(一个应用程序或是App)。 服务器

4. 产生桩和构架。 分布式

5. 启动RMI注册表。 spa

6. 运行服务器和客户程序。 code

实例: server

1. 定义一个远程接口Arith 对象

package rmi; public interface Arith extends java.rmi.Remote{ int []add(int a[],int b[])throws java.rmi.RemoteException; } 
2. 实现远程接口和服务器
package rmi;

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

public class ArithImpl extends UnicastRemoteObject implements Arith{
	private String objectName;

	
	protected ArithImpl(String s) throws RemoteException {
		super();
		objectName=s;
		// TODO Auto-generated constructor stub
	}

	private static final long serialVersionUID = 1L;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 * 建立并安装一个安全管理器。
		 * */
		RMISecurityManager sm=new RMISecurityManager();
		System.setSecurityManager(sm);
		try{
			/*
			 * 建立远程对象实例
			 * */
			ArithImpl ai=new ArithImpl("ArithServer");
			/*
			 * 用RMI向注册表中注册远程对象,是经过名字注册来绑定对象。
			 * 客户根据名字找到对象。
			*/
			Naming.rebind("//acer-pc/ArithServer", ai);
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}

	public int[] add(int[] a, int[] b){
		// TODO Auto-generated method stub
		int c[]=new int [10];
		for(int i=0;i<10;i++){
			c[i]=a[i]+b[i];
		}
		return c;
	}

}

3. 使用远程接口开发一个客户程序 接口

package rmi; import java.rmi.*; public class ArithApp { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int a[]={1,2,3,4,5,6,7,8,9},b[]={9,8,7,6,5,4,3,2,1}; int result[]=new int[9]; try{ /* * 首先从服务器注册表中查找到ArithServer的引用。 * */ Arith arith=(Arith)Naming.lookup("//acer-pc/ArithServer"); result=arith.add(a, b); }catch(Exception e){ e.printStackTrace(); } System.out.println("The sum="); for(int i=0;i<9;i++){ System.out.print(result+" "); } System.out.println(); } } 

4. 产生桩和构架 开发

    一旦编写了代码,就能够产生桩和构架,他是在运行时动态肯定的,并根据须要动态装载。用桩和构架,将客户和服务器链接在一块儿。

使用rmic编译器,能够很容易地产生RMI桩和构架。
   % rmic <option> <classname>
例如:% rmic ArithImpl
根据上述程序会产生两个文件:ArithImpl_Skel.class 和ArithImpl_Stub.class.


5. 启动注册表

% rmiregistery &  /*在Unix环境下使用,默认端口:1099*/
若是想在不一样端口使用则用:
% rmiregistery number &

6. 运行服务器和客户程序。

% java ArithImpl &
% java ArithApp
相关文章
相关标签/搜索