• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

六步教你学会简单RMI 上

发布: 2007-7-04 13:34 | 作者: admin | 来源:  网友评论 | 查看: 34次 | 进入软件测试论坛讨论

领测软件测试网  

MILY: 黑体; mso-ascii-font-family: Arial">六步教你学会简单RMI

江苏 无锡 缪小东

(以下所有java文件、.class文件和policy.txt文件都在c盘根目录哦!101.txtc盘的子目录11下哦!一定要放对!!!)

一、      定义远程接口

       远程接口就是远程机器上可供客户使用的方法的集合。很幸运它用java语言的接口表示!我们定义这样一个接口只有一个下载远程机器上的指定名称的文件。

//FileServerInterface.java

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface FileServerInterface extends Remote {

       public byte[] download(String Filename)throws RemoteException ;

}

 

二、实现远程接口

       实现上面远程接口的方法,同时继承UnicastRemoteObject类!

//FileServerImpl.java

import java.io.*;

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject ;

 

public class FileServerImpl extends UnicastRemoteObject implements FileServerInterface{

       private static final String initDir = "c://11//";

       public     FileServerImpl( ) throws RemoteException{

              super();

       }

      

       public byte[] download(String filename){

              try{

                     File file = new File(initDir + filename);

                     byte[] buffer = new byte[(int)file.length()];

                     BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

                     bis.read(buffer,0,buffer.length);

                     bis.close();

                     return buffer ;

              }catch(Exception e ){

                     System.out.println("FileServerImpl:  " + e.getMessage());

                     e.printStackTrace();

                     return null ;

              }

       }

      

}

 

三、编写服务器

1.         创建并安装一个RMISecurityManager实例;

2.         创建一个远程对象的实例;

3.         使用RMI注册工具注册该远程实例对象。

 

//FileServer.java

import java.io.*;

import java.rmi.*;

 

public class FileServer {

       public static void main(String[] args){

              if(System.getSecurityManager()==null ){

                     System.setSecurityManager(new RMISecurityManager());  

              }

              try{

                     FileServerImpl fi = new FileServerImpl("FileServer");

                     java.rmi.Naming.rebind("//127.0.0.1/FileServer",fi);

              }catch(Exception e){

                     System.out.println("FileServer:  " + e.getMessage());

                     e.printStackTrace();

              }            

       }

}

 

四、编写客户端

//FileClient.java

import java.io.*;

import java.rmi.*;

 

public class FileClient {

       public static void main(String[] args){

              if(args.length != 2 ){

                     System.out.println("Usage: java FileClient Filename machinename");

                     System.exit(0);

              }

              try{

                     String +args[1]+"/FileServer";

                     FileServerInterface fi = (FileServerInterface)Naming.lookup(name);

                     byte[] filedata = fi.download(args[0]);

                     File file = new File(args[0]);

                     BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));

                     bos.write(filedata,0,filedata.length);

                     bos.flush();

                     bos.close();                  

              }catch(Exception e){

                     System.out.println("FileClent:  " + e.getMessage());

                     e.printStackTrace();

              }

       }

}

 

五、创建一个policy文件

//policy.txt

grant{

       permission java.security.AllPermission "" , "" ;

};

 

六、运行程序

1. javac *.java

       这个都会吧!要么你就一个一个编译好了!

2. rmic FileServerImpl

 

       注意哦,不是FileServerImpl.class哦!看看下面的错误:

当成你要使用rmic命令编译一个FileServerImpl的内部类class哦!($代表什么,请阅读《Think in java》)

3. rmiregistry start rmiregistry

       使用rmiregistry的命令窗口,启动一个rmiregistry,本窗口“阻塞”(不太精确哦,就是不能输入其它命令)。

VBrPAvgo9aX8W7rOB6pTZwdraw" target=_blank>

       使用start rmiregistry命令,本窗口出现“提示符”,可以继续输入命令,且跳出一个窗口,也是“阻塞”的哦。表示正在工作,方法没有返回而已。

 

       注意该窗口的标题了没有!其中奥妙,慢慢体会!

 

4. java –Djava.security.policy=policy.txt FileServer

start java –Djava.security.policy=policy.txt FileServer

       使用此命令时policy.txt文件必须和FileServer.class在同一目录(本例c盘根目录)中哦!)

 

5. java FileClient 101.txt 127.0.0.1

start java FileClient 101.txt 127.0.0.1

       (使用此命令时101.txt必须位于c盘下11目录下哦,要不然没有下面的结果哦!)

       看看你的c盘根目录,是不是多了一个101.txt啊,是不是和你放在11目录下的101.txt一样啊!

       成了,到此结束!――六步学会简单RMI。是否很有成就感啊!

       (简单地把此代码拷贝过去,按照上面的顺序做就行了!立刻行动吧!)

       不过以上程序尽管是一个RMI网络程序,是否太简单了!Java手册中不是说可以传递java对象吗?要是真的能传递对象那就很强大啦!好像有些细节还不是很明白吧!

       请看下一篇!满足你以上的需求!下篇给你讲述各个接口和类的含义,以及RMI程序符合发布(哪些类位于客户端,哪些类位于服务器端)等等!     

 

 

更多精彩请到:
http://blog.163.com/miaoxiaodong78/

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网