转自:http://6221123.blog.51cto.com/6211123/1112619

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

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

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

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

好,以下是步骤:

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

  1. package dataserver.rmi.stub;
  2. import java.rmi.Remote;
  3. import java.rmi.RemoteException;
  4. import dataserver.rmi.bean.Account;
  5. public interface UserManagerInterface extends Remote{
  6. public String getUserName() throws RemoteException;
  7. public Account getAdminAccount() throws RemoteException;
  8. }

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

  1. package dataserver.rmi.bean;
  2. import java.io.Serializable;
  3. public class Account implements Serializable,Cloneable{
  4. /**
  5. *
  6. */
  7. private static final long serialVersionUID = -1858518369668584532L;
  8. private String username;
  9. private String password;
  10. public String getUsername() {
  11. return username;
  12. }
  13. public void setUsername(String username) {
  14. this.username = username;
  15. }
  16. public String getPassword() {
  17. return password;
  18. }
  19. public void setPassword(String password) {
  20. this.password = password;
  21. }
  22. }

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

  1. package dataserver.rmi;
  2. import java.rmi.RemoteException;
  3. import dataserver.rmi.bean.Account;
  4. import dataserver.rmi.stub.UserManagerInterface;
  5. public class UserManagerImpl implements UserManagerInterface {
  6. public UserManagerImpl() throws RemoteException {
  7. //super();
  8. // TODO Auto-generated constructor stub
  9. //UnicastRemoteObject.exportObject(this);
  10. }
  11. /**
  12. *
  13. */
  14. private static final long serialVersionUID = -3111492742628447261L;
  15. public String getUserName() throws RemoteException {
  16. // TODO Auto-generated method stub
  17. return "Tommy Lee";
  18. }
  19. public Account getAdminAccount() throws RemoteException {
  20. // TODO Auto-generated method stub
  21. Account account=new Account();
  22. account.setUsername("admin");
  23. account.setPassword("admin");
  24. return account;
  25. }
  26. }

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

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

  1. package dataserver.entry;
  2. import java.rmi.AlreadyBoundException;
  3. import java.rmi.RemoteException;
  4. import java.rmi.registry.LocateRegistry;
  5. import java.rmi.registry.Registry;
  6. import java.rmi.server.UnicastRemoteObject;
  7. import dataserver.rmi.UserManagerImpl;
  8. import dataserver.rmi.stub.UserManagerInterface;
  9. public class Entry {
  10. public static void main(String []args) throws AlreadyBoundException, RemoteException{
  11. UserManagerImpl userManager=new UserManagerImpl();
  12. UserManagerInterface userManagerI=(UserManagerInterface)UnicastRemoteObject.exportObject(userManager,0);
  13. // Bind the remote object's stub in the registry
  14. Registry registry = LocateRegistry.createRegistry(2001);
  15. registry.rebind("userManager", userManagerI);
  16. System.out.println("server is ready");
  17. }
  18. }

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

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

aaarticlea/png;base64,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" alt="" style="padding: 0px; margin: 0px; vertical-align: top; width: 370px; height: 466px;" />

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

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

  1. package weiblog.rmi;
  2. import java.rmi.NotBoundException;
  3. import java.rmi.RemoteException;
  4. import java.rmi.registry.LocateRegistry;
  5. import java.rmi.registry.Registry;
  6. import dataserver.rmi.stub.UserManagerInterface;
  7. public class Entry2 {
  8. public static void main(String []args){
  9. try {
  10. Registry registry = LocateRegistry.getRegistry("localhost",2001);
  11. UserManagerInterface userManager = (UserManagerInterface) registry.lookup("userManager");
  12. System.out.println(""+userManager.getAdminAccount().getUsername()
  13. +userManager.getAdminAccount().getPassword());
  14. } catch (RemoteException e) {
  15. // TODO Auto-generated catch block
  16. e.printStackTrace();
  17. } catch (NotBoundException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. }
  21. }
  22. }

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

server控制台打印:server is ready

client控制台打印:adminadmin

大功告成!!

最新文章

  1. oracle问题
  2. React的第一步
  3. vsftpd.conf 联机手册
  4. PHP+Mysql————表单数据插入数据库及数据提取
  5. Java 泛型 Java使用泛型的意义
  6. Docker for Windows 使用入门
  7. centos下mongodb备份(dump)与还原(restore)
  8. Mysql数据中Packet for query is too large错误的解决方法
  9. Unity3D外包 团队更新一下UE4和Unity3D案例
  10. Day 05 可变不可变、数据类型内置方法
  11. linux服务器安装mysql并配置外网访问
  12. Javascript实现一个插件
  13. 找不同diff-打补丁patch
  14. Kafka+Storm+HDFS 整合示例
  15. 2018.10.23 NOIP模拟 行星通道计划(bit)
  16. spring-boot+swagger实现WebApi文档
  17. PHP中调用外部命令的方法
  18. ThreadPool has stuck threads
  19. kvm虚拟化之kvm虚拟机克隆
  20. Python常用函数--文档字符串DocStrings

热门文章

  1. (DP)51NOD 1085 背包问题
  2. NET 编程题
  3. [笔试面试题] 10-C和C++区别相关
  4. 《编写可维护的Javascript》学习总结
  5. Objective-C设计模式——桥接Bridge(接口适配)
  6. python manage.py syncdb报错:No module named MySQLdb
  7. Pro ASP.NET Core MVC 第6版 第一章
  8. C# 调用带有输出参数的分页存储过程
  9. 在自学css开始就遇到问题,“链入外部样式表”在多浏览器显示问题
  10. canvas一周一练 -- canvas绘制马尾图案 (5)