博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RMI(Remote Method invocation,远程方法访问)
阅读量:5930 次
发布时间:2019-06-19

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

在做的项目中发现了一句:factory.setServiceUrl("rmi://"+url+":"+port+"/ipsvc"); 都说学习java只要学会如何调用底层方法就行,但说是这么说。

咱们还是要了解下底层东东,才能写出大师级别的代码。

出于什么,我百度了下RMI,操,不百度不知道。rmi听起来很厉害的样子,远程方法调用。

何为远程方法调用:跨平台、跨操作系统、跨虚拟机。

简单点就是,你在河东写了个方法,我在河西就能访问到,确实不错。

 

主文:

rmi程序编写步骤:

  1. 远程接口,要实现Remote接口、
  2. 远程接口实现,实现远程接口同时还要集成UnicastRemoteObject
  3. 远程服务类,绑定端口、绑定对象
  4. 远程访问客户类

开始写程序(没有在IDE上写,错误之处,见谅)

1 远程接口:必须集成Remote接口 2 public interface IMessage extends Remote{ 3     public Person getPerson() throws RemoteException; 4 } 5 //待传递对象,因此要实现序列化 6 public class Person implements Serializable{ 7    private int age; 8    private String name; 9    10    public Person(){11        12     }13 14     public Person(){15         this.age = age;16         this.name = name;17     }18 }19 20 远程接口实现:要集成UnicastRemoteObject类21 public class MessageImpl extends UnicastRemoteObject implements Rmote{22     public MessageImpl() throws RemoteException{23          24     }25 26     public Person getPerson() throws RemoteException{27           return new Person(22,"**");28     }29 }30 31 远程接口服务:32 public class server{33      public static void main(String agrs[]){34           if(System.getSercurity() == null){35                 System.setSecurty(new RmiSercurtyManage());36            }37 38            LocateRegistry.createRegistry(9999);  //绑定服务端口39 40            IMessage m = new MessageImpl();41            Naming.bing("rmi://loacalhost:9999/person",m);42            System.out.println("remote method is startting.......");43      }44 }45 46 client:47 pubic class Client{48    public static void main(String args[]){49           if(System.getSercurity() == null){50                 System.setSecurty(new RmiSercurtyManage());51            }52 53         IMessage m = (IMessage)Naming.lookup("rmi://loacalhost:9999/person");54          Person p = m.getPerson();55          System.out.println("" + p.getName());56    }57 }

写是能写出来,但有什么用呢?

我在一个项目中建立server和client包,这样是可以访问的。

但是我写两个项目,一个用户server、一个用于client,就会报access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)

 

这是远程方法访问,我通过Naming.lookup("----");获取的对象,是在远程,是从远程传递过来的。那么我需要调用远程接口的方法,我还必须得到远程的接口。

如果远程接口中定义的方法获取的是对象,就是说,我在本地调用方法获取的是远程的对象。

在本地访问远程方法时:

需要远程接口,

需要远程接口中返回的对象,

需要远程接口绑定的端口,和url

posted on
2013-12-05 11:11 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lh-V/p/3459117.html

你可能感兴趣的文章
LaTeX笔记模板
查看>>
Mybatis第一篇【介绍、快速入门、工作流程】
查看>>
mybatis底层原理学习(一):SqlSessionFactory和SqlSession的创建过程
查看>>
面向业务开发者的 k8s 基本命令
查看>>
恶意软件PE文件重建指南
查看>>
Discuz! X系列远程代码执行漏洞分析
查看>>
JS敏感信息泄露:不容忽视的WEB漏洞
查看>>
Apple OS X系统中存在可以提升root权限的API后门
查看>>
仿:Android - 微信 - 朋友圈 - 小视频播放,多4句废话算我输
查看>>
算法知识梳理(13) - 二叉树算法第三部分
查看>>
W3C 发布 EME 标准,EFF 退出 W3C
查看>>
#每日一记# 3分钟从 es6+ 编译成 es5 的代码里学习知识
查看>>
Python爬虫实战(4)-带你用Python爬取妹子图片
查看>>
最长回文子串
查看>>
JavaEE进阶知识学习-----SpringCloud(三)Eureka服务注册与发现
查看>>
Android Things 专题 2 硬件介绍
查看>>
你也许不知道,CSS 也有编程能力?
查看>>
认识阿里云的产品逻辑:基础设施必须必业务跑得快
查看>>
面试中的复杂度分析
查看>>
前端面试6:面向对象
查看>>