`
mjz13939958835
  • 浏览: 9389 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

RMI调用

 
阅读更多
java rmi即java远程接口调用,实现了2台虚拟机之间的程序调用,这样,网络上的任何两台计算机就可以相互调用对方的程序(如果允许)。
    好了,下面就以经典的 Hello world作为例子讲解。开发rmi的步骤如下。
1、编写远程接口,远程接口实现类
2、编译
3、生成接口实现类存根
4、在服务器端启动rmiregistry命令
5、在服务端注册发布远程对象
6、在客户端获取远程对象


实例:
以下远程接口类为HelloRemote,实现类为HelloImpl,服务器端的发布类为RMIServer,客户端的调用类为RMIClient,为简单考虑,服务器和客户端均在同一台机器(所谓服务器和客户机,是两者运行在2个虚拟机进程下)。
一、编写类
1、远程接口类,需基础java.rmi.Remote接口,且方法抛出RMIException


public interface HelloRemote extends Remote{
public void sayHello() throws RemoteException;  
}
2、远程接口实现类,需继承UnicastRemoteObject


public class HelloImpl extends UnicastRemoteObject  implements HelloRemote{
public HelloImpl() throws RemoteException {
super();
}
public void sayHello() throws RemoteException {
System.out.println("Hello World!");
}
}
3、服务端类
服务端类用于发布远程对象
public class RMIServer {
public static void main(String[] args) throws RemoteException, MalformedURLException {


HelloRemote hello=new HelloImpl();
Naming.rebind("hello", hello);
}
}
4、客户端类


public class RMIClient {
public static void main(String args[]) throws MalformedURLException, RemoteException, NotBoundException{
                           System.setSecurityManager(new   RMISecurityManager());//如果服务器和客户端不再同一台机器要加这行
HelloRemote hello=(HelloRemote) Naming.lookup("hello");
   hello.sayHello();
}
}
远程接口类需同时在服务端和客户端存在
二、编译(注意以上类都没有包,这里主要是简化操作考虑)
客户端文件夹在 E:/client(简称client),服务端在E:/server(简称server)
分别编译以上4个文件。然后将Hello.class分别放到client和server下,将Client.class放到client下,Server.class放到server下,HelloImpl.class文件放到server文件夹下
三、生成存根和骨架
进入server文件夹在命令行下输入命令 rmic HelloImpl,将生成一个HelloImpl_Stub.class文件
将此文件复制到client目录下(server与client均该文件)


四、运行注册程序
在命令行中进入server文件夹 输入命令 rmiregistry,用于启动注册,在此前需设置classpath为E:/server,输入rmiregistry命令后将在server文件夹下生成一个


五、运行服务类
java Server
六、运行客户类
java Client
你将看到执行成功。


当你执行不顺利时,请看看下面:
1、最终执行时要3个命令行窗口,一个运行rmiregistry,一个运行Server,一个运行Clinet,先执行rmiregistry命令,接着执行java Server,最后执行java Client
2、客户端和服务端均要有存根(HelloImpl_Stub.class)和远程接口的定义,且包名要一致。
3、当运行服务器时,提示找不到HelloImpl_Stub,那是你没指定类路径,那请你在执行rmiregistry前设置classpath
4、出现AscessableException访问非法时,需要修改此略文件,在jre/security目录下的java.policy文件中(如果你有多个jre,你无法确定是哪个。那就全部修改吧),在该文件中添加如下内容
grant {
           permission java.net.SocketPermission "*:1024-65535",
                "connect,accept";
           permission java.net.SocketPermission "*:80","connect";
        };


5、指定端口,默认是1099,可以在运行rmiregistry时指定 如 rmiregistry 1098,也可以在Server.java中指定,如Registry.createRegistry(1088).


6、绑定地址的设置
简单形式Naming.bind("hello"),本机地址时才可以
完全形式Naming.bind("rmi://117.45.220.11:1099/RMI_Hello")
分享到:
评论

相关推荐

    rmi调用架构设计

    rmi调用架构设计

    Spring-RMI (RMI调用, HTTP调用)

    Spring通过提供RMI集成,简化了RMI服务的创建和调用。以下是一些关键点: 1. **服务接口定义**:首先,你需要定义一个远程服务接口,这个接口将包含你希望在远程进程中执行的方法。 2. **服务实现**:接着,创建该...

    xmemcached1.3.5源码-附带自己写的RMI调用它的JMX服务

    xmemcached1.3.5源码-附带自己写的RMI调用它的JMX服务,使用RMI调用JMX服务的详细过程,完整的eclipse工程,直接导入即可用。还用一些运行截图,很有用。 自己写的例子,类名是BaseExample 和RMITest.

    RMI远程过程调用

    RMI采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。它允许运行在一个Java虚拟机上的对象调用运行在另一个Java虚拟机上的对象方法,从而使编程人员可以方便地在网络环境...

    RMI远程调用

    通过Spring的`RemoteProxyFactoryBean`,可以创建一个代理对象,该对象在调用方法时自动执行RMI调用。此外,Spring的`RmiServiceExporter`可以方便地导出一个bean为RMI服务,而无需直接处理RMI注册表。 总结来说,...

    rmi远程调用读取文件

    - **异常处理**:RMI调用可能会抛出`RemoteException`和其他网络相关的异常,需要适当地捕获和处理。 - **安全性**:RMI调用涉及网络通信,因此要考虑安全问题,如使用SSL加密,限制访问权限等。 - **性能优化**:...

    RMI远程方法调用RMI远程方法调用

    当客户端执行RMI调用时,它实际上是调用了Stub对象的方法。Stub会将参数序列化并封装成网络消息,通过网络发送给服务器。服务器的Skeleton接收到消息后,反序列化参数并调用对应的远程实现方法。处理完成后,返回值...

    使用rmi进行远程调用

    这些方法的实际实现位于服务器端,而客户端通过RMI调用这些方法,就像调用本地方法一样。 创建RMI服务涉及以下步骤: 1. **定义远程接口**:定义一个继承自`java.rmi.Remote`的接口,如`BankService`,并声明可能...

    分布式 RMI远程调用

    分布式RMI(Remote Method Invocation)远程调用是一种在分布式系统中实现对象间通信的技术,它允许一个对象在某个进程中调用另一个位于不同进程或者不同计算机上的对象的方法,从而实现跨网络的对象交互。...

    Java RMI远程方法调用详解-例子代码

    客户端将通过RMI调用服务器端的方法,并打印返回的结果。 这个简单的例子展示了RMI的基本使用方式。实际应用中,可能会涉及到更复杂的网络交互、多线程、安全性控制等话题。理解RMI的工作原理和实践,对于开发...

    Java-远程方法调用RMI参数详解.docx

    Java 远程方法调用(Remote Method Invocation,RMI)是一种在分布式环境中调用对象方法的技术,它使得Java应用程序能够透明地调用运行在不同 JVM 上的远程对象的方法。RMI 包含了一系列的参数,这些参数对于优化...

    rmi远程接口调用

    7. **处理异常**:由于网络通信的不确定性,RMI调用可能会抛出`java.rmi.RemoteException`和其他相关异常,需要在客户端捕获并处理。 在代码编写方面,服务端的代码通常会包含以下部分: - 创建并导出远程对象实例...

    RMI客户端调用远程服务器方法-远程方法调用

    - 性能:RMI调用涉及网络通信,相比本地方法调用会有一定的性能损失。 - 安全性:RMI通信容易暴露于网络攻击,需要额外的安全措施来保护。 - 依赖于Java平台:RMI是Java特有的,无法与其他语言的系统直接交互。 总...

    ssd8 exercise4 RMI远程方法调用

    - **网络依赖**:如果网络中断,RMI调用会失败,这对高可用性的应用来说是一个挑战。 总的来说,RMI是Java分布式系统中的一个强大工具,它简化了网络通信,并为开发人员提供了一种直观的方式来构建分布式应用。通过...

    java RMI客户端调用远程服务器系统命令

    3. **性能优化**:频繁的RMI调用可能会增加网络负担,考虑批量处理或缓存结果以减少通信次数。 4. **版本兼容性**:当服务器或客户端更新时,必须保证远程接口的兼容性,否则会导致调用失败。 5. **测试与调试**:...

    rmi 远程方法调用

    - 客户端调用代理对象的方法,请求被封装成RMI调用消息,通过网络发送给服务器。 - 服务器接收到消息,解码并执行相应的远程方法,然后将结果编码回RMI响应消息。 - 客户端收到响应,解码得到方法的返回结果。 4...

    利用RMI异步调用

    在IT行业中,远程方法调用(Remote Method Invocation, RMI)是Java平台提供的一种机制,允许在不同的Java虚拟机之间进行分布式计算。RMI使得一个Java对象能够像调用本地方法一样调用远端对象的方法,极大地扩展了...

    Java RMI远程方法调用

    8. **异常处理**:由于网络通信的不确定性,Java RMI调用可能会抛出各种异常,如 java.rmi.ConnectException(连接失败)、NotBoundException(未找到绑定的对象)和RemoteException(远程通信异常)等。因此,良好...

    RMI远程时钟调用 java程序

    8. **安全性考虑**:RMI调用涉及网络通信,因此需要考虑安全措施,例如使用SSL/TLS加密通信,限制服务器的访问策略,或者对远程对象的调用进行权限控制。 9. **性能优化**:对于大型的分布式系统,可能需要考虑RMI...

    Rmi示例 Rmi代码示例

    - **异常处理**:RMI调用可能遇到网络中断、远程对象不存在等问题,因此客户端需要适当地捕获和处理`java.rmi`包下的异常,如`RemoteException`。 3. **RMI通信机制**: - **marshalling**与**unmarshalling**:...

Global site tag (gtag.js) - Google Analytics