利用RMI技术构建远程会话详细教程

1、引言

内容为:利用RMI技术构建远程会话:2个客户端发送消息到服务器端,服务器端把相应的消息中转发送给对应的客户,进行远程对话。

2、实验环境

  • 操作系统:Windows 10
  • 实验工具:IntelliJ IDEA
  • 环境:Java jdk 1.8

3、实验过程

3.1 熟悉RMI技术原理

RMI基本原理图如下,应用了代理模式来封装了本地存根与真实的远程对象进行通信的细节。
ALT

3.2熟悉RMI技术构建远程会话之“Hello world”例子

3.2.1 创建远程接口,接口定义了所有的提供远程服务的功能

远程接口需要继承java.rmi.Remote接口;
接口中的所有方法声明抛出java.rmi.RemoteException;

package rmi_test;

import java.rmi.*;

public interface Hello extends java.rmi.Remote{
   
   
    String sayHello(String name) throws java.rmi.RemoteException;
}

3.2.2 创建远程类,实现远程接口,是远程服务的具体实现

package rmi_test;

import java.rmi.*;
import java.rmi.server.*;

public class HelloImpl implements Hello{
   
   
    public HelloImpl(){
   
   }
    public String sayHello(String name){
   
   
        return "Hello,"+name+"!";
    }
}

3.2.3 创建服务器程序,Server类是一个简单的服务器

其中,通过UnicastRemoteObject.exportObject(obj,0)方法,将自身导出为远程对象;
通过createRegistry()方法注册远程对象;
通过rebind方法,把远程对象绑定到指定名称空间中;

package rmi_test;

import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;

public class Server{
   
   
    public Server() {
   
   }
    public static void main(String args[]) {
   
   
        System.setSecurityManager(new RMISecurityManager());

        final HelloImpl obj = new HelloImpl();
        try {
   
                                  // 0 - anonymous TCP port ↓
            Hello stub = (Hello)UnicastRemoteObject.exportObject(obj, 0);
            // Bind the remote object's stub in the registry
            Registry registry = LocateRegistry.createRegistry(3333);
            registry.rebind("Hello", stub);
            for(int i = 0; i < registry.list().length; i++)
                System.out.println(registry.list()[i]);
            System.err.println("Server ready....");
            System.err.println("Listinging on port 3333 ....");
        } catch (Exception e) {
   
   
            e.printStackTrace(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值