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

2016-02-19 12:44 3 1 收藏

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

【 tulaoshi.com - 编程语言 】

       一、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上。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1601727.html

延伸阅读
  FtpList部分是用来显示FTP服务器上的文件; GetButton部分为从FTP服务器下传一个文件; PutButton部分为向FTP服务器上传一个文件。 别忘了在程序中还要引入两个库文件(import sun.net.*,import sun.net.ftp.*)。 以下是这三部分的JAVA源程序: (1)显示FTP服务器上的文件 void ftpList_actionPerformed(ActionEvent e) { St...
下截JNative组件 jnative.sourceforge.net/ 到这里下载JNative开源项目,我下载的是1.3.2 解压JNative-st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899"1.3.2/st1:chsdate.zip 获得三个文件,分别是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。 JNativeCpp.dll Windows下用的,拷贝到windows ...
看着办公室里的同事大李每天下班时间一到就早早打卡回家,在温暖的家中通过远程控制软件来继续工作,还在冷冰冰的办公室里加班的小张暗暗下了决心:不行,我也要早早回家,美美吃上一顿再加班!不过Linux下面可以实现远程控制吗? “当然可以了!像我一样用VNC不就成了?”大李拍拍小张的肩膀,“兄弟一场,我就来教教你吧!” VN...
今天我想实现利用javascript调用WebService我首先就想到了ASP.Net Ajax 因为微软的东西用着方便,我从网上看了看,这东西好多人都写了,我就从官方找了个Demo下了看看源代码,感觉没什么特殊的,于是动手开始写.先添加一个webservice.asmx然后在default.aspx中加入ScriptManager 并设置serviecs属性 <asp:ScriptManager runa...
一、API函数的声明、自定义数据类型及常量的定义 ----注意:API函数的声明应在应用程序的代码模块中进行,且一条声明必须放在一行中'API函数的声明 PublicDeclareFunctionFindFirstFileLib "kernel32"Alias"FindFirstFileA" (ByVallpFileNameAsString, lpFindFileDataAsWIN32_FIND_DATA)AsLong PublicDeclareFuncti...

经验教程

48

收藏

81
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部