如何在Java中实现远程方法调用

a小龙63

a小龙63

2016-02-19 12:44

有了下面这个如何在Java中实现远程方法调用教程,不懂如何在Java中实现远程方法调用的也能装懂了,赶紧get起来装逼一下吧!

       一、Java中的远程方法调用
  
  远程方法调用(Remote Method Invocation, RMI)是Java1.1引入的分布式对象软件包,它的出现简化了在多台机器上的Java应用之间的通信。相比CORBA,RMI功能较弱且只能用于Java系统。
  
  二、实现一个简单的RMI
  要使用RMI,必须构造四个主要的类:远程对象的本地接口、RMI客户、远程对象实现和RMI服务器。RMI服务器生成远程对象实现的一个实例,并用一个非凡的URL注册它,RMI客户在远程服务器上查找对象,若找到就把它转换成本地接口类型,然后像一个本地对象一样使用它。下面是一个简单的RMI例子,远程对象只返回一个消息字符串。要使这个例子更有价值,我们需要做的就是完善远程对象实现类。
  
  1.远程对象的本地接口类(Rem.java)
  
  该类仅仅是一个接口,而不是实现,RMI客户机可以直接使用它,RMI服务器必须通过一个远程对象来实现它,并用某个URL注册它的一个实例。
  
  import java.rmi.*;
  public interface Rem extends Remote { public String getMessage() throws RemoteException;}
  
  本地接口(Rem)必须是公共的,否则客户机在加载一个实现该接口的远程对象时就会出错。此外,它还必须从java.rmi.Remote继续而来,接口中的每一个方法都必须抛出远程异常java.rmi.RemoteException。
  
  2.RMI客户类(RemClient.java)
  
  RMI客户使用Naming.lookup在指定的远程主机上查找对象,若找到就把它转换成本地接口Rem类型,然后像一个本地对象一样使用它。与CORBA不同之处在于RMI客户必须知道提供远程服务主机的URL,这个URL可以通过rmi://host/path或rmi://host:port/path来指定,假如省略端口号,就使用1099。Naming.lookup可能产生三个异常:RemoteException、NotBoundException、MalformedURLException,三个平常都需要捕捉。RemoteException、Naming和NotBoundException在java.rmi.*中定义,MalformedURLException在java.net.*中定义。另外,客户机将向远程对象传递串行化对象Serializable,所以还应在程序中输入java.io.*。
  import java.rmi.*;
  import java.net.*;
  import java.io.*;
  public class RemClient {
  public static void main(String[] args) {
  try {
  String host = (args.length 0) ? args[0] : "localhost"; //从命令行读取远程主机名
  //通过URL在远程主机上查找对象,并把它转化为本地接口Rem类型
  Rem remObject=(Rem)Naming.lookup("rmi://" + host + "/Rem");
  System.out.println(remObject.getMessage()); //调用远程对象的方法
  } catch(RemoteException re) {System.out.println("RemoteException: " + re);
  } catch(NotBoundException nbe) {System.out.println("NotBoundException: " + nbe);
  } catch(MalformedURLException mfe){System.out.println("MalformedURLException:"+ mfe);
  }}}
  3.远程对象实现类(RemImpl.java)
  这个类真正实现RMI客户调用的远程对象,它必须从UnicastRemoteObject继续,其构造函数应抛出RemoteException异常。
  import java.rmi.*;
  import java.rmi.server.UnicastRemoteObject;
  public class RemImpl extends UnicastRemoteObject implements Rem {
  public RemImpl() throws RemoteException {} //构造函数抛出RemoteException异常
  public String getMessage() throws RemoteException {
  return("Here is a remote message."); }} //向RMI客户返回一个消息串 4.RMI服务器类(RemServer.java)该类创建远程对象实现RemImpl的一个实例,然后用一个特定的URL来注册它,所谓注册就是通过Naming.bind或Naming.rebind来将RemImpl实例绑定到URL上。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

如何在Java中实现远程方法调用

编程语言 网络编程
如何在Java中实现远程方法调用

如何在C/C++中调用Java

编程语言 网络编程
如何在C/C++中调用Java

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

关于远程方法调用(RMI)的实现

Java JAVA基础
关于远程方法调用(RMI)的实现

如何在Java中消除实现继承和面向接口编程

编程语言 网络编程
如何在Java中消除实现继承和面向接口编程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用java实现外部调用exe文件

编程语言 网络编程
用java实现外部调用exe文件

Java中如何调用cmd压缩文件

编程语言 网络编程
Java中如何调用cmd压缩文件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

快速找出两个Word文档之间的差别

快速找出两个Word文档之间的差别

Html5新标签解释及用法

Html5新标签解释及用法
下拉加载更多内容 ↓