`
ly_ltw
  • 浏览: 8891 次
文章分类
社区版块
存档分类
最新评论

java rmi

 
阅读更多
RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序

这里讲述的是基于JDK1.5的RMI程序搭建,更简单的说是一个 HelloWorld RMI。

1. 这里是基于JDK1.5的,节省了繁琐的手工编译(生成桩和骨架)。不像1.4之前的RMI。

2. 这里是把客户端和服务器端的两个程序,分布在两个独立的程序里面,而不是同一个package下面。是真正的分布式。

3. 这里不过多阐述原理,这只是一个Hello World!!

好,以下是步骤:

1. 在Eclipse里面创建一个server 端的project。然后,创建一个接口,这个接口是你要向client端开放的方法定义。它叫做:UserManagerInterface,而且必须继承Remote接口。

  1. packagedataserver.rmi.stub;
  2. importjava.rmi.Remote;
  3. importjava.rmi.RemoteException;
  4. importdataserver.rmi.bean.Account;
  5. publicinterfaceUserManagerInterfaceextendsRemote{
  6. publicStringgetUserName()throwsRemoteException;
  7. publicAccountgetAdminAccount()throwsRemoteException;
  8. }

2. 为了证明RMI中,“面向对象”或者是“无缝传递JAVA Object”是何等简单,我们需要定义一个Account类,该类是一个Bean,必须实现implements Serializable序列化接口。这是一个可以在client和server传输的可序列化对象。

  1. packagedataserver.rmi.bean;
  2. importjava.io.Serializable;
  3. publicclassAccountimplementsSerializable,Cloneable{
  4. /**
  5. *
  6. */
  7. privatestaticfinallongserialVersionUID=-1858518369668584532L;
  8. privateStringusername;
  9. privateStringpassword;
  10. publicStringgetUsername(){
  11. returnusername;
  12. }
  13. publicvoidsetUsername(Stringusername){
  14. this.username=username;
  15. }
  16. publicStringgetPassword(){
  17. returnpassword;
  18. }
  19. publicvoidsetPassword(Stringpassword){
  20. this.password=password;
  21. }

  22. }

3. 此时,需要实现你已经开放的接口:

  1. packagedataserver.rmi;
  2. importjava.rmi.RemoteException;
  3. importdataserver.rmi.bean.Account;
  4. importdataserver.rmi.stub.UserManagerInterface;
  5. publicclassUserManagerImplimplementsUserManagerInterface{
  6. publicUserManagerImpl()throwsRemoteException{
  7. //super();
  8. //TODOAuto-generatedconstructorstub
  9. //UnicastRemoteObject.exportObject(this);
  10. }
  11. /**
  12. *
  13. */
  14. privatestaticfinallongserialVersionUID=-3111492742628447261L;
  15. publicStringgetUserName()throwsRemoteException{
  16. //TODOAuto-generatedmethodstub
  17. return"TommyLee";
  18. }
  19. publicAccountgetAdminAccount()throwsRemoteException{
  20. //TODOAuto-generatedmethodstub
  21. Accountaccount=newAccount();
  22. account.setUsername("admin");
  23. account.setPassword("admin");
  24. returnaccount;
  25. }
  26. }

4. 定义一个主程序入口,注册你已经实现的RMI接口,包括开放端口等。其实很简单:

把我们的接口名称,命名为“userManager”,方便client进行调用

  1. packagedataserver.entry;
  2. importjava.rmi.AlreadyBoundException;
  3. importjava.rmi.RemoteException;
  4. importjava.rmi.registry.LocateRegistry;
  5. importjava.rmi.registry.Registry;
  6. importjava.rmi.server.UnicastRemoteObject;
  7. importdataserver.rmi.UserManagerImpl;
  8. importdataserver.rmi.stub.UserManagerInterface;
  9. publicclassEntry{
  10. publicstaticvoidmain(String[]args)throwsAlreadyBoundException,RemoteException{
  11. UserManagerImpluserManager=newUserManagerImpl();
  12. UserManagerInterfaceuserManagerI=(UserManagerInterface)UnicastRemoteObject.exportObject(userManager,0);
  13. //Bindtheremoteobject'sstubintheregistry
  14. Registryregistry=LocateRegistry.createRegistry(2001);
  15. registry.rebind("userManager",userManagerI);
  16. System.out.println("serverisready");
  17. }
  18. }

5. Server端的代码已经全部写完,但是还要把bean类(Account)和接口类(UserMangerInterface)打包成jar,以便可以在下面导入进client端的项目中。

项目--》右键--》导出--》jar--》选择bean和interface--》命名为RmiServerInterface.jar--》finish


6. 开始创建client端的程序。新建一个project。创建完成后,把刚才jar包导入进client的项目中。

7. 导入我们的接口jar以后,可以开始编写一个client端的主程序,并调用server端的方法。

  1. packageweiblog.rmi;
  2. importjava.rmi.NotBoundException;
  3. importjava.rmi.RemoteException;
  4. importjava.rmi.registry.LocateRegistry;
  5. importjava.rmi.registry.Registry;
  6. importdataserver.rmi.stub.UserManagerInterface;
  7. publicclassEntry2{
  8. publicstaticvoidmain(String[]args){
  9. try{
  10. Registryregistry=LocateRegistry.getRegistry("localhost",2001);
  11. UserManagerInterfaceuserManager=(UserManagerInterface)registry.lookup("userManager");
  12. System.out.println(""+userManager.getAdminAccount().getUsername()
  13. +userManager.getAdminAccount().getPassword());
  14. }catch(RemoteExceptione){
  15. //TODOAuto-generatedcatchblock
  16. e.printStackTrace();
  17. }catch(NotBoundExceptione){
  18. //TODOAuto-generatedcatchblock
  19. e.printStackTrace();
  20. }
  21. }
  22. }

8. 启动server端的主程序,然后启动client端的主程序。

server控制台打印:server is ready

client控制台打印:adminadmin


分享到:
评论

相关推荐

    java rmi java rmi

    java rmi java rmijava rmi javajava rmi java rmi rmi

    java RMI技术实现的网络聊天室

    java RMI技术实现的网络聊天室 编译通过,很完整的。代码很有参考价值

    基于JAVA RMI的聊天室

    采用JAVA rmi,带图形界面,完全由自己实现的聊天室,具备基本的聊天功能,可以自己扩充功能

    javaRMI反序列化漏洞验证工具

    检测javaRMI反序列化漏洞

    java RMI简单Demo

    java RMI

    java RMI实现代码

    java RMI实现代码。分为客户端和服务器端,有清楚的代码注释。

    Java RMI 简单示例

    Java RMI 简单示例

    java rmi远程调用

    最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程

    JavaRMI.pdf

    JavaRMI.pdf

    Java RMI.pdf

    《Java RMI》一书的英文版本,With Java RMI, you'll learn tips and tricks for making your RMI code excel. This book provides strategies for working with serialization, threading, the RMI registry, ...

    javaRMI完整版.pdf

    javaRMI完整版.pdf

    Java RMI中文规范

    这是本人搜集整理的Java RMI规范,中文版,经过排版 共包括10个章节,2个附录

    java rmi上传文件

    在这次的项目中,对于客户端与服务器之间的通信,想了许多办法,由于做的是富客户端应用,最终将技术选定在了RMI和Java-sockets两种之间,其中RMI的灵活性不高,客户端和服务器端都必须是java编写,但使用比较方便,...

    原创的JavaRMI项目

    这是原创的最简单的Java RMI入门项目,内含二个Eclipse项目,一是服务器端,二是客户端。非常简单,只看其中的注释就能理解(当然先要知道什么是RMI了),只供入门用。 这是用Java 1.7编辑的,如果你用的版本低,则...

    JavaRMI的原理和实现方法

    JavaRMI的原理和实现方法 分布式对象计算 来源于青岛大学学报

    分布式程序java 实验名称 基于Java RMI的C/S编程实验

    实验名称 基于Socket的C/S编程实验 实验名称 基于Java RMI的C/S编程实验

    java rmi HelloWorld版(源码)

    java rmi 调用实例及详细说明,详细可参见博客:http://blog.csdn.net/fufengrui/article/details/9855865

    JAVARMI实例[文].pdf

    JAVARMI实例[文].pdf

    JavaRMI分布式编程心得

    网络上绝大多数关于Java RMI分布式编程的资料真的很久、很古老了, 我也是偶尔看到别人的文章,自己动手做实验才总结的一些心得与例子, 希望能够帮到那些有用的人!

Global site tag (gtag.js) - Google Analytics