首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

RMI小例实战记要

2012-08-31 
RMI小例实战记录一、关于RMI对于远程,有些时候会想到FTP,HTTP,NFS,IMAP.POP等这些协议,但这些都是主机之间

RMI小例实战记录

一、关于RMI

对于远程,有些时候会想到FTP,HTTP,NFS,IMAP.POP等这些协议,但这些都是主机之间移动文件和数据的信号。另外还有一个是一台主机运行另一台主机的程序,例如Telnet等。而RMI(Remote Method Invocation)正是这个类型。

远程/本地对象区别:远程的对象驻留在不同的虚拟机中,向远程方法传参数和返回结果。

?

二、RMI机制

对于这种思想的实现机制有三个:

对于简单类型:按值传递

对于实现Remote接口的对象:以远程引用传递,允许接收方法调用远程对象上的方法,这与向本地JAVA方法传递本地引用的方法相似。

对于没有实现Remote接口的对象:按值传递(序列化)

?

三、RMI分层

服务器程序----------------------------客户端程序骨架----------------------------桩过程引用 ----------------------------过程引用传输层--------Internet---------传输层

?

这样的分层有点像网络的分层关系。

?

四、实例?

???? 1.服务器接口继承Remote

import java.rmi.* ;import java.rmi.server.*;public interface TestRMIServer extends Remote{public String getMessage(String str) throws RemoteException ;}

????? 2.服务器继承UnicastRemoteObject并间接实现Remote(TestRMIServer接口)

import java.rmi.* ;import java.rmi.server.* ;public class TestRMIServerImpl extends UnicastRemoteObject implements TestRMIServer{public TestRMIServerImpl() throws RemoteException{super() ;}public String getMessage(String str) throws RemoteException {System.out.println(str) ;return "success" ;}public static void main(String arg[]){try{TestRMIServerImpl instance = new TestRMIServerImpl() ;Naming.rebind("test",instance) ;System.out.println("Server Registered") ;}catch(Exception e){System.out.println(e) ;}}}

???? 3.编写TestClient类为客户端

import java.io.*;import java.rmi.*; public class TestClient{       public TestClient(){         try{                     BufferedReader input=new BufferedReader(new InputStreamReader(System.in));                     String s=input.readLine();                                      TestRMIServer testServer=(TestRMIServer)Naming.lookup("rmi://127.0.0.1/test");                                       String str=testServer.getMessage(s);                     System.out.print(str);              }catch(Exception e){System.out.println(e);}       }       public static void main(String s[]){              new TestClient();       }} 

???? 4.如下的步骤进行操作?
RMI小例实战记要

javac?对所有的类进行编译

rmic编译后会产生一个TestRMIServerImpl_Stub.class的文件(放在客户端的)

start rmiregistry看前的转载<转>网络编程RMI ,这个打开会有一个黑屏的。

policytool用的设置一些权限,具体如下

?由添加规则项目----》添加权限----》权权限,然后按下面这样选点确认与完成:
RMI小例实战记要


?????? RMI小例实战记要
?
????????? RMI小例实战记要

?

? 5.测试

java TestRMIServerImpl运行服务器

如下图运行客户端

???? RMI小例实战记要

出现上面的东西,这个实验成功了。

? 6.可能会出现的问题

???? 6.1当忘记开启注册表时,会出现下面的错误:

????????? RMI小例实战记要
?
???? 6.2 当没有开启服务器时,会出现这样的错误:
???????
RMI小例实战记要
?
?
好了,就这样了,如果用两个或更多机器去调用服务器的方法,在编译后的.class文体中,选三个复制(TestRMIServerImpl_Stub.class,TestRMIServer.class,TestClient.class)过去客户机器就可以了,否则,客户机会错的。

热点排行