Java RMI远程方法调用

来源:互联网 发布:彩票数据库设计 编辑:程序博客网 时间:2024/05/16 15:18

Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。

1、接口定义

package com.lxp.rmi;import java.rmi.Remote;import java.rmi.RemoteException;public interface IHello extends Remote{public String HelloWorld() throws RemoteException;public String sayHelloToSomeBody(String name) throws RemoteException;}
2、接口实现

package com.lxp.rmi;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;//必须继承UnicastRemoteObjectpublic class HelloImpl extends UnicastRemoteObject implements IHello{@Overridepublic String HelloWorld() throws RemoteException {return "Hello World!";}@Overridepublic String sayHelloToSomeBody(String name) throws RemoteException {return "你好"+name;}public HelloImpl() throws RemoteException {}}
3、服务器端实现

package com.lxp.rmi;import java.net.MalformedURLException;import java.rmi.AlreadyBoundException;import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;public class HelloServer {public static void main(String[] args) {try { //创建一个远程对象 IHello rhello = new HelloImpl(); //本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上 LocateRegistry.createRegistry(8889);//把远程对象注册到RMI注册服务器上,并命名为RHello             //绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)Naming.bind("rmi://localhost:8889/RHello", rhello);//Naming.bind("//localhost:8888/RHello", rhello);System.out.println(">>>>>>>Info:远程IHello对象绑定成功!");} catch(RemoteException e) {System.out.println("创建远程对象发生异常!");e.printStackTrace();} catch(AlreadyBoundException e) {System.out.println("发生重复绑定对象异常!");e.printStackTrace();} catch(MalformedURLException e) {System.out.println("发生URL畸形异常!");e.printStackTrace();}}}
4、客户端实现

package com.lxp.rmi;import java.net.MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;public class HelloClient {public static void main(String[] args) {try {IHello rhello = (IHello)Naming.lookup("rmi://localhost:8889/RHello");System.out.println(rhello.HelloWorld());System.out.println(rhello.sayHelloToSomeBody("鸣人"));} catch(RemoteException e) {e.printStackTrace();} catch(NotBoundException e) {e.printStackTrace();} catch(MalformedURLException e) {e.printStackTrace();}}}





0 0
原创粉丝点击