RMI网络编程: 如何搭建基于JDK1.5的分布式JAVA RMI

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

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

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

package dataserver.rmi.bean; 

import java.io.Serializable; 

public class Account implements Serializable,Cloneable{ 

    /**
     *
     */
    private static final long serialVersionUID = -1858518369668584532L;
    private String username;
    private String password; 

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    } 

} 

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

package dataserver.rmi; 

import java.rmi.RemoteException; 

import dataserver.rmi.bean.Account;
import dataserver.rmi.stub.UserManagerInterface; 

public class UserManagerImpl implements UserManagerInterface { 

    public UserManagerImpl() throws RemoteException {
        //super();
        // TODO Auto-generated constructor stub
        //UnicastRemoteObject.exportObject(this);
    } 

    /**
     *
     */
    private static final long serialVersionUID = -3111492742628447261L; 

    public String getUserName() throws RemoteException {
        // TODO Auto-generated method stub
        return "Tommy Lee";
    } 

    public Account getAdminAccount() throws RemoteException {
        // TODO Auto-generated method stub
        Account account=new Account();
        account.setUsername("admin");
        account.setPassword("admin");
        return account;
    } 

} 

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

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

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

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

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

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
 7 import dataserver.rmi.stub.UserManagerInterface;
 8
 9 public class Entry2 {
10
11     public static void main(String []args){
12
13         try {
14             Registry registry = LocateRegistry.getRegistry("localhost",2001);
15             UserManagerInterface userManager = (UserManagerInterface) registry.lookup("userManager");
16             System.out.println(""+userManager.getAdminAccount().getUsername()
17                     +userManager.getAdminAccount().getPassword());
18         } catch (RemoteException e) {
19             // TODO Auto-generated catch block
20             e.printStackTrace();
21         } catch (NotBoundException e) {
22             // TODO Auto-generated catch block
23             e.printStackTrace();
24         }
25
26     }
27 } 

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

server控制台打印:server is ready

client控制台打印:adminadmin

可以参考:http://www.cnblogs.com/end/archive/2012/11/16/2772812.html

时间: 08-31

RMI网络编程: 如何搭建基于JDK1.5的分布式JAVA RMI的相关文章

unix网络编程环境搭建

unix网络编程环境搭建 新建 模板 小书匠 1.点击下载源代码 可以通过下列官网中的源代码目录下载最新代码: http://www.unpbook.com/src.html 2.解压文件 tar -xzvf upv13e.tar.gz 3.上传至阿里云 本人本地已经配置好,这次实验是将环境搭建至云服务器中. scp -r unpv13e [email protected]120.76.140.119:/root/program/unp // -r 上传文件夹  4.编译文件 cd unpv13

网络编程[第二篇]基于udp协议的套接字编程

udp协议下的套接字编程 一.udp是无链接的    不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息,只需自己发送了即可 二.客户端 import socket #买手机 -- 套接字家族 | 端口协议 phone = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #服务端地址 ip_port = ('127.0.0.1',8001) #实现多次发送

黑马课程中iOS网络编程服务器搭建以及源码

看过视频,看过文顶顶的博客.对客户端讲解的都很不错,唯独对服务端的搭建讲解的比较简单.这一步,卡住了自己好久. 要用的软件:apache-tomcat-7.0.61.tar.gz, com.sysdeo.eclipse.tomcat_3.3.1.jar,eclipse-jee-luna-SR2-macosx-cocoa-x86_64.tar.gz 1.com.sysdeo.eclipse.tomcat_3.3.1.jar是一个插件,拷贝eclipse/plugins目录里. 2.再次打开ecli

106 网络编程实战之基于socketserver实现多用户FTP服务器

基于socketserver实现多用户FTP服务器项目 github项目地址:https://github.com/XuCheng121/socketserver_ftp_server-sys 版本:0.1版 客户端 服务端 简介: 基于TCP协议,同时支持多用户同时上传和下载操作,实现ftp服务器 上传内容均使用MD5进行内容校验.上传文件内容相同则会极速上传成功 上传内容均通过JSON文件保存文件内容的MD5值,作为上传文件内容信息记录 conf目录:项目配置 core目录:用户视图层源码

C/C++网络编程6——实现基于UDP的服务器端/客户端

前面介绍了基于TCP实现的服务器端和客户端,本节介绍基于UDP实现的服务器端和客户端.UDP协议提供的无连接的,不可靠的传输服务,在一些要求传输速度,可以接受丢包的传输场景应用广泛,比如视频音频传输场景.UDP中只有创建套接字的过程和数据交换的过程. #include <sys/socket.h> sszie_t sendto(int sock, void *buff, size_t nbytes, int flags, struct sockaddr *to, socklen_t addrl

基于servlet网络编程

1.我们知道了基于http协议的网络编程模型和基于套接字的网路编程模型(相对于我的博客上写的),那么我们将使用更加便捷的servlet网络编程. 基于http协议的网络编程,我的博客上面需要我们自己写客户端,基于套接字的网络编程我的博客上面需要我们自己写客户端和服务器端,现在我们用servlet编程,不需要我们写客户端和服务器端,我们只需要在tomcat容器里写我们的处理程序就行,响应请求由tomcat来完成. 2.如何在tomcat上部署项目.打开tomcat文件,找到webapp文件里面的例

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码

Java网络编程基础【转】

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

TCP/IP网络编程系列之四(初级)

TCP/IP网络编程系列之四-基于TCP的服务端/客户端 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流的套接字.在了解TCP之前,先了解一下TCP所属的TCP/IP协议栈. 如图所示,TCP/IP协议栈共分为4层,可以理解成数据收发分成了4个层次化过程. 链路层 它是物理链接领域标准化结果,也是最基本的领域,专门定义LAN.WAN.MAN等网络标准.若两台计算机通过网络进行数据交换,链路层就负责整个物