rmi远程调用被拒绝_java基础-rmi原理和使用

67c9b8f0f376350f95d5668484ba69b1.png

介绍

想要java程序成为可调用的远端服务,需要implements(实现)java.rmi.Remote接口即可。javaDOC是这样描述java.rmi.Remote的:

Remote接口哟用于标识方法可以从非本地虚拟机调用。任何物体远程对象必须直接或间接实现此接口。只有在"remote interface"中指定方法,即实现java.rmi.Remote接口,才能实现远程使用。

宗旨

远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。

步骤

完成远程调用的步骤如下:

  1. 定义一个远程接口,用以实现Remote接口
  2. 开发远程接口的实现类
  3. 创建一个server,并把远程对象注册到端口
  4. 创建一个client查找远程对象,调用远程方法

1.定义远程接口

package rmi;

import java.rmi.Remote;

public interface IHello extends Remote {

  public String sayHello(String name) throws java.rmi.RemoteException;
}

2.远程接口实现类

package rmi.impl;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import rmi.IHello;

public class HelloImpl extends UnicastRemoteObject implements IHello {

  protected HelloImpl() throws RemoteException {
    super();
  }

  @Override
  public String sayHello(String name) throws RemoteException {
    System.out.println("调用sayHello方法");
    return name+"说:hello";

  }
}

3.创建server,注册对象

package rmi.server;

import java.rmi.registry.LocateRegistry;
import rmi.IHello;
import rmi.impl.HelloImpl;

public class HelloServer {
  public static void main(String[] args) {
    try {
      IHello hello = new HelloImpl();
      /*
      在主机ip上创建并提供一个“注册表”实例,用来接收指明“端口”的请求
       */
      LocateRegistry.createRegistry(8888);

      /*
      给一个远程对象重新绑定一个“给定”的名字
      @param name:必须为一个URI形式
      这个方法会覆盖之前已经绑定的名字
       */
      java.rmi.Naming.rebind("rmi://127.0.0.1:8888/hello", hello);
      System.out.print("Ready");
    } catch (Exception e) {
      System.out.println("提供远程对象失败,原因是:"+e.getMessage());
    }
  }
}

4.创建客户端,请求远程对象

package rmi.client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import rmi.IHello;


public class HelloClient {

  public static void main(String[] args) {

    try {
      
      /*
      返回指定名字的远程 对象的一个引用
       */
      IHello hello = (IHello) Naming.lookup("rmi://127.0.0.1:8888/hello");
      System.out.println("调用远程对象,开始交谈:"+hello.sayHello("韩梅梅"));
    } catch (Exception e) {
      System.out.println("调用远程对象失败,原因是:"+e.getMessage());
    }
  }
}

5.结果

调用远程对象,开始交谈:韩梅梅说:hello
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值