Java 实现RMI入门程序

来源:互联网 发布:网络流行字 编辑:程序博客网 时间:2024/06/06 00:53

因为是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程序已经完成。

1 0
原创粉丝点击