Java中RMI远程调用

Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。

  Java RMI极大地依赖于接口。在需要创建一个远程对象的时候,程序员通过传递一个接口来隐藏底层的实现细节。客户端得到的远程对象句柄正好与本地的根代码连接,由后者负责透过网络通信。这样一来,程序员只需关心如何通过自己的接口句柄发送消息。

  服务端新建接口:


import java.rmi.Remote;

import java.rmi.RemoteException;

public interface RmiTestInterface extends Remote{

public String getTest() throws RemoteException;

}

  接口的实现:


import java.rmi.RemoteException;

public class RmiTestImpl implements RmiTestInterface {

public RmiTestImpl() throws RemoteException {

//super();

// TODO Auto-generated constructor stub

//UnicastRemoteObject.exportObject(this);

}

/**

*

*/

public String getTest() throws RemoteException {

// TODO Auto-generated method stub

return "Hello,Test";

}

}

  定义一个main方法,注册你已经实现的RMI接口,包括开放端口等:


public static void main(String []args) throws AlreadyBoundException, RemoteException{

RmiTestImpl t=new RmiTestImpl();

RmiTestInterface tt=(RmiTestInterface)UnicastRemoteObject.exportObject(t,0);

// Bind the remote object's stub in the registry

Registry registry = LocateRegistry.createRegistry(2001);

registry.rebind("test", tt);

System.out.println("server is start");

}

 Server端的代码已经全部写完,但是还要把接口类(RmiTestInterface)打包成jar,导入进client端的项目中。

  运行服务端后控制台输出:

  server is start

  导入服务端的接口jar以后,可以开始编写一个client端的主程序:


public static void main(String []args){

try {

Registry registry = LocateRegistry.getRegistry("localhost",2001);

RmiTestInterface t= (RmiTestInterface) registry.lookup("test");

System.out.println("client:"+t.getTest());

} catch (RemoteException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NotBoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

  运行客户端main方法后,控制台输出:

  Hello,Test


English »
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBengaliBelarusianBulgarianCatalanChinese (Simp)Chinese (Trad)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKannadaKoreanLaoLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishTamilTeluguThaiTurkishUkrainianUrduVietnameseWelshYiddish  

Options : History : Help : Feedback


English »
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBengaliBelarusianBulgarianCatalanChinese (Simp)Chinese (Trad)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKannadaKoreanLaoLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishTamilTeluguThaiTurkishUkrainianUrduVietnameseWelshYiddish  

Options : History : Help : Feedback

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-12 19:39:59

Java中RMI远程调用的相关文章

第三方dll文件-Java中利用jawin调用dll文件,invoke的参数问题

问题描述 Java中利用jawin调用dll文件,invoke的参数问题 各位大神: dll中的被调用方法如下: long WINAPI AutoOpenComPort(long* Port, unsigned char *ComAdr, unsigned char Baud,long *FrmHandle); 其中: Port:输出变量, ComAdr:输入/输出变量 Baud:输入变量 FrmHandle:输出变量 请问它的 msgBox.invoke(instructions, stack

接口-RMI远程调用,一服务端和客户端一定要在一个工程里么

问题描述 RMI远程调用,一服务端和客户端一定要在一个工程里么 小弟初学RMI的知识,网上说的也不明白,我自己做了一个helloword测试,我不太明白的是 ,服务端和客户端一定要在一个工程下么?如果一定在一个工程下,那还算什么远程调用啊? 可是我在服务端有一个接口:IHello,成功绑定到8888端口之后,我新建客户端工程,在 IHello iHello = Naming.lookup("rmi://localhost:8888/IHello"); 在写这句话的时候,MyEclips

java中利用反射调用另一类的private方法的简单实例_java

我们知道,Java应用程序不能访问持久化类的private方法,但Hibernate没有这个限制,它能够访问各种级别的方法,如private, default, protected, public. Hibernate是如何实现该功能的呢?答案是利用JAVA的反射机制,如下:  import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectDemo

Python中实现远程调用(RPC、RMI)简单例子_python

远程调用使得调用远程服务器的对象.方法的方式就和调用本地对象.方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了.远程调用是分布式系统的基础. 远程调用一般分为两种,远程过程调用(RPC)和远程方法调用(RMI). RPC RPC属于函数级别的远程调用,其多是通过HTTP传输数据,数据形式有XML.JSON.序列化数据等.在此,用python做一个xml-rpc的示例. 先给服务器端server.py: 复制代码 代码如下: from SimpleXMLRPCServer import S

关于java中使用jacob调用c++写的ocx时参数传递的问题

问题描述 我用c++写了一个简单的ocx写了3个方法TestFunc()TestFunc3(SHORTport)TestFunc2(SHORTport,CHAR*strIP)在java中这么调用ActiveXComponentcomx=newActiveXComponent("ACEWEB.ACEWebCtrl.1");Dispatchdisp=comx.getObject();Dispatch.call(disp,"TestFunc");Dispatch.call

java中Flash remoting调用servlet

服务器:jrun4 组件:flash remoting components as2.0 软件:flash mx 2004 pro 在安装好后,打开jrun4的管理页面,进入页面之后你会看到jrun已经创建好了3个服务器,分别是admin,default和samples,我们使用的服务器为default,对与flash remoting的相关用法可参照lwanchen的flashremoting实践(三)-hello world for java:http://www.riacn.com/web

java远程调用powershell,有熟悉的么

问题描述 java远程调用powershell,有熟悉的么 如题,最近在调试java远程调用powershell,有熟悉的大神指教一下么,如果方便希望加我QQ 2844801761 一起交流一下! 解决方案 Java rmi 远程调用通过java反射调用远程方法java远程调用之spring和hessian

对Java中传值调用的理解分析_java

本文实例分析了Java中的传值调用.分享给大家供大家参考.具体分析如下: Java以引用的方式操作对象实例 可以确认的是Java中操作对象的方式是以引用的方式操作对象.为了更深刻的了解这点我写了如下代码: 首先定义一个自定义类型 复制代码 代码如下: public class Person {            String name;            Person(String name){          this.name = name;      }  } 这里name默认是

Java中函数的递归调用

说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void main(String[] args){ // Scanner s = new Scanner(System.in); // System.out.println("请输入一个数字"); // int num = s.nextInt(); int c = 10 , d = 20 ; sw