Java 实现RMI入门程序

因为是Java内置的功能,所以不需要引入任何额外的Jar包

首先我们定义一个接口,这个接口必须继承Remote

package cn.blueboz.rmi;

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

/**
 * Created by Administrator on 2016/4/20.
 * 定义一个远程接口,这个远程接口务必实现Remote接口
 */
public interface IHelloRMI extends Remote {
    /**
     * 一个最简单的Hello实例
     */
    public String sayHelloToClient()throws RemoteException;
}


 
 接下来就是实现这个接口,注意,这个必须继承UnicastRemoteObject这个类 
package cn.blueboz.rmi.impl;

import cn.blueboz.rmi.IHelloRMI;

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

/**
 * Created by Administrator on 2016/4/20.
 */
public class HelloRMIImpl extends UnicastRemoteObject implements IHelloRMI{

    /*i
     * 这里必须是构造器抛出RemoteException
     * 因为继承父类UnicastRemoteObject构造器中抛出RemoteException
     * 同时这个类是必须继承UnicastRemoteObject这个类
     */
    public HelloRMIImpl()throws RemoteException{
    }
    @Override
    public String sayHelloToClient()throws RemoteException {
        return "你好客户端,我是服务端";
    }
}
接下来就是发布接口了

package cn.blueboz.rmi;

import cn.blueboz.rmi.impl.HelloRMIImpl;

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

/**
 * Created by Administrator on 2016/4/20.
 */
public class RMIServer {
    /**
     * 发布接口
     * @param args
     */
    public static void main(String[] args) throws RemoteException, AlreadyBoundException, MalformedURLException {
        /**
         * 创建一个远程接口的实现类
         */
        IHelloRMI helloRMI=new HelloRMIImpl();
        /**
         * 创建一个RMI端口,如果没有创建,RMI服务也就无法绑定到这个接口上面
         */
        System.out.println("正在创建接口");
        LocateRegistry.createRegistry(8889);
        System.out.println("创建端口成功");
        /**
         * 在这里声明一下三个异常
         * RemoteException:创建远程对象异常
         * AlreadyBoundException:重复绑定异常
         * MalformedURLException:指定的URI发生错误的异常
         */
        System.out.println("正在绑定");
        Naming.bind("rmi://localhost:8889/HelloRMI",helloRMI);
        System.out.println("绑定成功!");
        //注意,何以省略掉协议前缀,即使rmi:
        //Naming.bind("//localhost:8889/HelloRMI",helloRMI);
    }
}
最后,我们可以看到

就说明我们的接口发布成功了,也可以使用终端内置工具netstat查看端口占用情况,发现存在8889端口,表示我们的端口发布成功

接下来就是测试我们的端口

新建另外的一个工程,从服务端赋值过来远程接口IHelloRemote,并且保持包路径不变

package cn.blueboz.rmiclient;

import cn.blueboz.rmi.IHelloRMI;

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

/**
 * Created by Administrator on 2016/4/20.
 * Java RMI客户端
 */
public class RMIClient {
    public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException {
        /**
         * IHelloRMI接口从服务端拷贝过来即可
         * 这里必须注意的是IHelloRMI的包路径必须与服务端一致
         * 如果不一致,会发生ClassNotFoundException
         * Naming.lookup是在指定地址插在rmi服务
         */
        IHelloRMI helloRMI = (IHelloRMI) Naming.lookup("rmi://localhost:8889/HelloRMI");
        String s = helloRMI.sayHelloToClient();
        System.out.println(s);
    }
}
下面是测试结果


到这里JavaRMI的HelloWorld程序已经完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值