<%@ page contentType="text/html; charset=gb2312"%> 六步教你学会简单RMI 上
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
六步教你学会简单RMI 上
     发布者:江苏 无锡 缪小东 发布时间:2006-12-04
 

六步教你学会简单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,本窗口“阻塞”(不太精确哦,就是不能输入其它命令)。

       使用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/

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
六步教你学会简单RMI(中)
Java对象池技术的原理及其实现
实现基于Spring框架应用的权限控制系统
基于MVC设计模式的WEB应用框架研究
Java SE 6之脚本引擎 让程序如虎添翼
Java列表对象的性能分析和测试
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(6534)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(4749)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(8401)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(2464)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号