博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java RMI 远程调用简易教程
阅读量:6289 次
发布时间:2019-06-22

本文共 2792 字,大约阅读时间需要 9 分钟。

  hot3.png

这里分三步来讲,讲的比较繁琐.也是希望不会的人能尽可能看得懂.会的肯定不会看.OK,开始.

第一部分:服务器(生产者) 需要定义一个远程接口,以及实现该接口的类.

1.公共接口.

package com.pan.rmi.interf;import java.rmi.Remote;import java.rmi.RemoteException;/** * Created by pan on 2016/10/4. */public interface ServiceRemote extends Remote {    //远程需要用到的方法    String doSomething() throws RemoteException;}

2.服务端实现接口(远程调用的类)

package com.pan.rmi.impl;import com.pan.rmi.interf.ServiceRemote;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;/** * Created by pan on 2016/10/4. */public class ServiceImple extends UnicastRemoteObject implements ServiceRemote {    /**     * 初始化抛出异常     * @throws RemoteException     * @since JDK1.1     */    public ServiceImple() throws RemoteException {    }    @Override    public String doSomething() throws RemoteException {        System.out.println("Service: A method is called !");        return "Service doSomething .";    }}

3.启动服务端

package com.pan.rmi;import com.pan.rmi.impl.ServiceImple;import java.rmi.Naming;import java.rmi.registry.LocateRegistry;/** * Created by pan on 2016/10/4. */public class Main {    public static void main(String[] args) {        try {            ServiceImple service = new ServiceImple();            //注册方法一//            Registry registry = LocateRegistry.createRegistry(9889) ;//            registry.rebind("myRemote", service);            //注册方法二            LocateRegistry.createRegistry(6600);            Naming.rebind("rmi://127.0.0.1:6600/myRemote", service);            System.out.println("服务器启动成功!");        } catch (Exception e) {            e.printStackTrace();        }    }}

第二步:(将接口打包到客户端程序,可以用jar本地包,也可以使用maven本地仓库.)

第三步:(客户端代码调用服务端的方法)

package com.pan.rmi.client;import com.pan.rmi.interf.ServiceRemote;import java.net.MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;/** * Created by pan on 2016/10/4. */public class ClientImpl {    public static void main(String[] args) {        try {            //获取远程服务,这里注意一下端口必须跟服务端设置的一致            ServiceRemote remote = (ServiceRemote) Naming.lookup("rmi://127.0.0.1:6600/myRemote");            //调用远程方法            String s = remote.doSomething();            //输出            System.out.println("客户端接受消息:" + s);        } catch (NotBoundException e) {            e.printStackTrace();        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (RemoteException e) {            e.printStackTrace();        }    }}

测试结果:

1.客户端

客户端接受消息:Service doSomething .Process finished with exit code 0

2.服务端

服务器启动成功!Service: A method is called !

 

 

题外:

RMI是Java内置的一种比较简单的远程调用方式,类是的还有apache的http远程调用.一般用于分布式服务器框架的proxy层,java作为一门高级语言.目前来说socket编程都比较的繁琐,更相对于底层通信(例如tcp/ip协议算法更是...),所以,一般来说都是使用成熟的框架去实现我们的需求.

转载于:https://my.oschina.net/lmxy1990/blog/754402

你可能感兴趣的文章
PTA基础编程题目集6-2多项式求值(函数题)
查看>>
中国大学MOOC-JAVA学习(浙大翁恺)—— 信号报告
查看>>
Linux下Firefox汉化方法
查看>>
OC API
查看>>
Java遍历包中所有类方法注解
查看>>
[JLOI2014]松鼠的新家
查看>>
struts2 ognl 调用静态方法
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
力软框架 接口映射的时候不能修改添加接口原因
查看>>
ArrayList与string、string[]的转换代码
查看>>
关于Java加载属性文件放在web容器不好使的解决办法
查看>>
PHP使用RabbitMQ实例
查看>>
plsql导入excel文件
查看>>
疑难en_a
查看>>
[Java入门笔记] Java语言基础(四):流程控制
查看>>
cubla sample-code
查看>>
ACM中出现RuntimeError的原因及可能的解决办法
查看>>
《sift算法详解》阅读笔记
查看>>
HTML5 Web Workers 简单例子
查看>>
谈谈Mono开发的一些想法 ^_^
查看>>