【Java】RMI


RMI(Remote Method Invocation,远程程序调用)。
在这里插入图片描述

源码准备

服务端
创建远程接口
//MyRemote.java

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface MyRemote extends Remote{
    public String sayHello() throws RemoteException;
}

创建远程接口MyRemote。可以看到,远程接口MyRemote继承自java.rmi.Remote
在远程接口MyRemote中定义了客户端可以调用的远程方法sayHello

实现远程接口
// MyRemoteImpl.java

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

public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{
    public static void main(String[] args){
        try {
            MyRemote service = new MyRemoteImpl();
            Naming.rebind("RemoteHello",service);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public MyRemoteImpl() throws RemoteException{

    }
    @Override
    public String sayHello(){
        return "Server asys,'Hey'";
    }
}

MyRemoteImpl实现远程接口MyRemote,就要实现远程接口中定义的方法sayHello,这个方法会被客户端远程调用。
MyRemoteImpl通过继承UnicastRemoteObject成为一个远程服务类,通过new MyRemoteImpl()来创建远程服务对象。
注意哈UnicastRemoteObject的构造函数会抛出RemoteException异常,对此,MyRemoteImpl也要声明一个构造函数并抛出RemoteException异常。
通过Renaming.rebind("RemoteHello",service),RMI系统才会将我们创建的远程服务对象MyRemote service = new MyRemoteImpl()注册到registry中,至此service成为客户端服务设施,即sub

客户端
// MyRemoteClient.java

import java.rmi.Naming;
public class MyRemoteClient{
    public static void main(String[] args){
        new MyRemoteClient().go();
    }
    public void go(){
        try{
            MyRemote service = (MyRemote) Naming.lookup("rmi://127.0.0.1/RemoteHello");
            String s = service.sayHello();
            System.out.println(s);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

客户端通过Naming.lookup("rmi://127.0.0.1/RemoteHello")查找名为RemoteHello的远程服务对象,并调用该对象提供的方法sayHello

编译

在source目录下编译,javac -d ../classes *.java

执行rmic生成sub类

在classes目录下执行,rmic MyRemoteImple,生成MyRemoteImpl_Stub.class

启动rmiregistry

在classes目录下执行,rmiregistry

启动远程服务

在classes目录下执行java MyRemoteImpl,创建远程对象并注册服务,以供客户端查询该服务。

运行客户端

在classes目录下执行java MyRemoteClient
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值