网络编程技术第七次课件_第1页
网络编程技术第七次课件_第2页
网络编程技术第七次课件_第3页
网络编程技术第七次课件_第4页
网络编程技术第七次课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络编程技术第七次1第七次课 rmi计算机科学与技术学院计算机科学与技术学院 网络工程教研室网络工程教研室 袁卫华袁卫华网络编程技术第七次2rmi一、一、rmi概述概述二、二、rmi体系结构体系结构七、实现回调七、实现回调三、三、rmi工作机制工作机制四、一个简单的四、一个简单的rmi例子例子五、第二个例题五、第二个例题六、实现工厂六、实现工厂八、思考和作业八、思考和作业 网络编程技术第七次3一、什么是一、什么是rmi一、rmi概述rmi是指远程方法调用,将客户和服务器间的接口抽象为是指远程方法调用,将客户和服务器间的接口抽象为一个本地的过程调用。一个本地的过程调用。nrmi是可用于开发分布式

2、程序的是可用于开发分布式程序的jdk核心包。核心包。n在所编写的分布式程序中,其远程对象的方法能够被运在所编写的分布式程序中,其远程对象的方法能够被运行在不同主机上的其他行在不同主机上的其他java虚拟机的方法调用。虚拟机的方法调用。n当所有参数被传递给远程目标并被解释,然后将结果返当所有参数被传递给远程目标并被解释,然后将结果返回给调用者。回给调用者。这个过程给程序员一个错觉:以为是从本地类文件中调用这个过程给程序员一个错觉:以为是从本地类文件中调用一个本地方法。一个本地方法。网络编程技术第七次41、什么是、什么是rmi一、rmi概述rmi是指远程方法调用,将客户和服务器间的接口抽象为是指远

3、程方法调用,将客户和服务器间的接口抽象为一个本地的过程调用。一个本地的过程调用。对象对象应用程序应用程序本地调用本地调用机器机器a对象对象对象对象机器机器b对象对象网络网络远程调用远程调用网络编程技术第七次51、什么是、什么是rmi一、rmi概述rmi的特征:的特征:n透明调用透明调用n分布的垃圾回收分布的垃圾回收n对流的方便访问对流的方便访问对象对象应用程序应用程序本地调用本地调用机器机器a对象对象对象对象机器机器b对象对象网络网络远程调用远程调用网络编程技术第七次61、rmi系统组成系统组成二、rmi体系结构rmi系统有三层组成系统有三层组成n桩桩/架构(架构(stub/skeleton)

4、n远程引用层远程引用层n传输层传输层桩桩构架构架远程引用层远程引用层传输层传输层服务器服务器客户客户网络编程技术第七次72、rmi系统组成:桩系统组成:桩/架构层架构层二、rmi体系结构桩桩/架构层是应用程序与系统其他部分的接口架构层是应用程序与系统其他部分的接口n当完成服务器应用程序开发后,就是用当完成服务器应用程序开发后,就是用rmi的的misc编译器编译器产生桩产生桩/架构层,它根据服务器程序的字节代码,产生代理类。架构层,它根据服务器程序的字节代码,产生代理类。n桩是客户端的代理,桩允许客户与系统的其它层通信。桩是客户端的代理,桩允许客户与系统的其它层通信。n架构是服务器端的入口架构是

5、服务器端的入口网络编程技术第七次82、rmi系统组成:桩系统组成:桩/架构层架构层二、rmi体系结构桩桩/架构层是应用程序与系统其他部分的接口架构层是应用程序与系统其他部分的接口n远程对象客户端桩的任务远程对象客户端桩的任务n初始化远程调用初始化远程调用n序列化发送参数序列化发送参数n指示远程引用层将要进行调用指示远程引用层将要进行调用n反序列化返回值反序列化返回值n提示远程传输层调用完成提示远程传输层调用完成网络编程技术第七次92、rmi系统组成:桩系统组成:桩/架构层架构层二、rmi体系结构桩桩/架构层是应用程序与系统其他部分的接口架构层是应用程序与系统其他部分的接口n服务器端架构的任务服

6、务器端架构的任务n反序列化客户端输入的参数反序列化客户端输入的参数n调用实际的远程对象实现调用实际的远程对象实现n将返回值序列化为流以传输给客户将返回值序列化为流以传输给客户网络编程技术第七次103、rmi系统组成:远程调用层系统组成:远程调用层二、rmi体系结构远程调用层是桩远程调用层是桩/架构层和传输层的中间层架构层和传输层的中间层n远程调用层负责为独立于客户桩和服务器架构的多种形远程调用层负责为独立于客户桩和服务器架构的多种形式的远程调用和调用协议提供支持。式的远程调用和调用协议提供支持。n单点传送协议可能提供点对点的调用单点传送协议可能提供点对点的调用n多点传输协议提供对复制的成组对象

7、的调用。多点传输协议提供对复制的成组对象的调用。网络编程技术第七次11二、rmi体系结构4、rmi系统组成:传输层系统组成:传输层n传输层负责建立到远程地址空间的连接传输层负责建立到远程地址空间的连接n管理连接管理连接n监听外来调用监听外来调用n维护驻留于同一个地址空间的远程对象表维护驻留于同一个地址空间的远程对象表n为外来的调用建立连接,以及根据远程调用的目的定为为外来的调用建立连接,以及根据远程调用的目的定为调度程序,并传递连接给该调度程序。调度程序,并传递连接给该调度程序。n同一个地址空间可以支持同一个地址空间可以支持tcp和和udp两种协议。两种协议。网络编程技术第七次121、rmi工

8、作过程工作过程三、rmi工作机制n通常,调用通过桩通常,调用通过桩/架构层传递,桩架构层传递,桩/架构层作为应用程序架构层作为应用程序与与rmi系统的其他部分的一个接口来提供服务:通过序列系统的其他部分的一个接口来提供服务:通过序列化流,将数据传输到远程引用层。化流,将数据传输到远程引用层。n一旦数据通过桩一旦数据通过桩/架构层传递,它将通过远程引用层,远架构层传递,它将通过远程引用层,远程引用层实现了调用的语义,把数据传输到传输层。程引用层实现了调用的语义,把数据传输到传输层。n最后,数据到达传输层。最后,数据到达传输层。网络编程技术第七次131、创建、创建rmi应用程序的步骤应用程序的步骤

9、四、一个简单的rmi例子n1)定义一个远程接口)定义一个远程接口n2)实现远程接口和服务器)实现远程接口和服务器n3)使用远程接口开发一个客户程序)使用远程接口开发一个客户程序n4)产生桩和架构)产生桩和架构n5)启动)启动rmi注册表注册表n6)运行服务器程序和客户程序)运行服务器程序和客户程序网络编程技术第七次142、应用举例:定义一个远程接口、应用举例:定义一个远程接口四、一个简单的rmi例子n设计一个接口时需要考虑所要支持的方法和每一个方法设计一个接口时需要考虑所要支持的方法和每一个方法所需的参数。所需的参数。n客户通过远程接口了解服务器提供的方法以及如何调用客户通过远程接口了解服务器

10、提供的方法以及如何调用这些方法。这些方法。nrmi使用异常来报告错误信息:如由于服务器关机,超使用异常来报告错误信息:如由于服务器关机,超载等原因无法和服务器建立连接。载等原因无法和服务器建立连接。n远程对象需要声明为远程对象需要声明为public的,并扩展接口的,并扩展接口java.rmi.remoten接口中的每一个方法都必须声明为接口中的每一个方法都必须声明为java.rmi,throws一句一句中必须抛出中必须抛出remoteexception异常。异常。网络编程技术第七次152、应用举例、应用举例-算术服务器:算术服务器:定义一个远程接口定义一个远程接口四、一个简单的rmi例子pub

11、lic interface arith extends java.rmi.remote int add(int a, int b) throws java.rmi.remoteexception;n远程对象需要声明为远程对象需要声明为public的的n扩展接口扩展接口java.rmi.remoten接口中的每一个方法都必须声明为接口中的每一个方法都必须声明为java.rmi,throws一句一句中必须抛出中必须抛出remoteexception异常。异常。网络编程技术第七次162、应用举例、应用举例-算术服务器:算术服务器:实现远程接口实现远程接口四、一个简单的rmi例子n指定要执行的远程接口

12、指定要执行的远程接口n定义远程对象成员器定义远程对象成员器n实现能被远程调用的方法实现能被远程调用的方法n创建一个安全管理器的实例,并安装它创建一个安全管理器的实例,并安装它n创建远程对象的一个或多个实例创建远程对象的一个或多个实例n注册一个远程对象到注册一个远程对象到rmi注册器注册器public class arithimpl extends unicastremoteobject implements arith private string objectname;public arithimpl(string s) throws remoteexception public int a

13、dd(int a, int b) public static void main(string args)网络编程技术第七次172、应用举例、应用举例-算术服务器:算术服务器:实现远程接口实现远程接口四、一个简单的rmi例子public class arithimpl extends unicastremoteobject implements arith private string objectname;public arithimpl(string s) throws remoteexception super();objectname = s;public int add(int a,

14、 int b) int c = new int10;for (int i = 0; i 10; i+) ci = ai + bi;return c;narithimpl用于创建一个单一用于创建一个单一的、非复制远程对象,使用的、非复制远程对象,使用rmi默认的基于默认的基于socket的传输的传输n实现接口方法,传递两个整型实现接口方法,传递两个整型数组给数组给add()方法,返回一个整方法,返回一个整型数组。型数组。网络编程技术第七次182、应用举例、应用举例-算术服务器:算术服务器:实现远程接口实现远程接口四、一个简单的rmi例子public class arithimpl extends

15、 unicastremoteobject implements arith public static void main(string args)rmisecuritymanager sm=new rmisecuritymanager();system.setsecuritymanager(sm);try arithimpl obj=new arithimpl(arithserver); naming.rebind(rmi:/:1099/arithserver,obj);system.out.println(arithserver bound in registry);ca

16、tch(exception e)system.out.println(arithimpl error:+e.getmessage();e.printstacktrace();n创建并安装一个安全管理器,保护主机不受客创建并安装一个安全管理器,保护主机不受客户恶意代码的损坏。户恶意代码的损坏。网络编程技术第七次192、应用举例、应用举例-算术服务器:算术服务器:实现远程接口实现远程接口四、一个简单的rmi例子arithimpl obj=new arithimpl(arithserver);n创建远程对象实例,服务器准备好监听客户的请求。创建远程对象实例,服务器准备好监听客户的请求。naming.

17、rebind(rmi:/:1099/arithserver,obj);n将远程对象注册到将远程对象注册到rmi注册表中,以便客户获得对远程注册表中,以便客户获得对远程对象的引用,能够调用远程对象中的方法。对象的引用,能够调用远程对象中的方法。nrmi系统提供了一个基于系统提供了一个基于url注册的解决方法,以注册的解决方法,以/host/objectname的形式绑定对象。的形式绑定对象。1099是是rmi注册表运行的默认的端口号。注册表运行的默认的端口号。网络编程技术第七次202、应用举例、应用举例-算术服务器:算术服务器:使用远程接口开发客户程序使用远程接口开发客户程序:

18、arithapp.java四、一个简单的rmi例子n客户必须首先从服务程序的客户必须首先从服务程序的注册表中获得对注册表中获得对arithserver的的引用,然后远程调用方法引用,然后远程调用方法add,将数组将数组a和和b相加,将返回值保相加,将返回值保存在新数组存在新数组result中。中。网络编程技术第七次213、调试运行过程、调试运行过程四、一个简单的rmi例子n1)编译接口和类文件)编译接口和类文件n2)产生桩和架构)产生桩和架构编写完所有的代码后,就需要产生桩和架构。编写完所有的代码后,就需要产生桩和架构。桩和架构在运行时确定,并根据需要动态加载。桩和架构在运行时确定,并根据需要

19、动态加载。客户客户网络网络桩桩客户客户桩桩网络编程技术第七次223、调试运行过程、调试运行过程四、一个简单的rmi例子n3)启动)启动rmi注册表注册表rmi注册表是一个名字服务,允许客户程序对远程对象进行注册表是一个名字服务,允许客户程序对远程对象进行引用。引用。rmi注册表可以看做是注册表可以看做是rmi远程对象引用的管理器。远程对象引用的管理器。客户客户远程对象远程对象rmi注册表注册表2.查询查询1.注册注册3.调用方法调用方法n运行注册表,并使之监运行注册表,并使之监听默认的听默认的1099端口端口网络编程技术第七次233、调试运行过程、调试运行过程四、一个简单的rmi例子n4)运行

20、服务程序和客户程序)运行服务程序和客户程序网络编程技术第七次244、调试过程中可能出现的问题及解决方案、调试过程中可能出现的问题及解决方案四、一个简单的rmi例子n1)错误一:)错误一:n原因:无法解析和连接到原因:无法解析和连接到的的1099端口上,原因是端口上,原因是设置了安全管理器设置了安全管理器system.setsecuritymanager(new rmisecuritymanager();,可是又没有设置访问的策略,可是又没有设置访问的策略网络编程技术第七次254、调试过程中可能出现的问题及解决方案、调试过程中可能出现的问题及解决方案四、一个简单的rmi例子n1

21、)错误一:)错误一:n解决办法:解决办法:1)把代码)把代码system.setsecuritymanager(new rmisecuritymanager();去掉,不设置安全管理器去掉,不设置安全管理器2)修改)修改jre的安全策略文件,在的安全策略文件,在eclipse中用中用jdk是是c:javajdk1.5.0_06,相应的安全策略文件就是相应的安全策略文件就是c:javajdk1.5.0_06jrelibsecurityjava.policy,网络编程技术第七次26五、第二个例题五、第二个例题1. 例题例题2:城市信息服务器:城市信息服务器城市信息服务器提供某一城市人口和温度的查询

22、,客户通城市信息服务器提供某一城市人口和温度的查询,客户通过输入城市名可以获取该城市的人口数和温度等信息。过输入城市名可以获取该城市的人口数和温度等信息。n简单代码实现简单代码实现n定义远程接口:定义远程接口:city.javan实现远程接口:实现远程接口:cityimpl.javan开发客户端程序:开发客户端程序: cityapp.javan运行该程序:运行该程序:n编译上述三个类文件编译上述三个类文件n产生桩和架构产生桩和架构n启动启动rmi注册注册n运行服务器和客户程序运行服务器和客户程序网络编程技术第七次271. 例题例题2:城市信息服务器:城市信息服务器n运行界面运行界面五、第二个例

23、题五、第二个例题网络编程技术第七次281. 例题例题2:城市信息服务器:城市信息服务器n类文件结构及其相互关系类文件结构及其相互关系public interface city extends remotepublic class cityimpl extends unicastremoteobject implements citypublic class cityapp 客户客户远程对象远程对象rmi注册表注册表2.查询查询1.注册注册3.调用方法调用方法五、第二个例题五、第二个例题网络编程技术第七次291. 例题例题2:城市信息服务器:城市信息服务器n类文件结构及其相互关系类文件结构及其相

24、互关系public class cityimpl extends unicastremoteobject implements citypublic int getpopulation(string cityname) public int gettemperature(string cityname) public static void main(string args)cityimpl obj=new cityimpl(cityserver);naming.rebind(rmi:/:1099/cityserver,obj);system.out.println(city

25、server bound in registry!); public class cityapp city obj = (city) naming.lookup(rmi:/:1099/cityserver); pop = obj.getpopulation(toronto); system.out.println(the population of toronto is: + pop);远程对象远程对象注册注册查询远程对象查询远程对象调用其方法调用其方法五、第二个例题五、第二个例题网络编程技术第七次302. 例题例题2:城市信息服务器分析:城市信息服务器分析由于由于cityi

26、mpl.java继承了继承了unicastremotobject,所以,所以rmi客户无法启动客户无法启动rmi服务器程序及其创建它的实例。服务器程序及其创建它的实例。public class cityimpl extends unicastremoteobject implements city n如果用一个城市信息服务器来处理与所有城市相关的信息,如果用一个城市信息服务器来处理与所有城市相关的信息,会导致服务器过载,解决这一问题,可以为每个城市创建一会导致服务器过载,解决这一问题,可以为每个城市创建一个不同的个不同的cityimpl服务器,要求该服务器只处理与该城市有关服务器,要求该服务器

27、只处理与该城市有关的信息请求。的信息请求。n通过工厂通过工厂factory,创建动态服务器:客户程序中能够启动,创建动态服务器:客户程序中能够启动服务器程序及实例化该对象。服务器程序及实例化该对象。五、第二个例题五、第二个例题网络编程技术第七次31六、实现工厂1. 工厂概述及工厂接口定义工厂概述及工厂接口定义n使用工厂,可以创建远程对象的多个实例,并使它们能够相使用工厂,可以创建远程对象的多个实例,并使它们能够相互调用。互调用。n工厂只有一个负责创建对象的方法,该方法所创建的对象以工厂只有一个负责创建对象的方法,该方法所创建的对象以后将被客户程序作为一般的服务器程序来使用。后将被客户程序作为一

28、般的服务器程序来使用。n定义工厂接口:定义工厂接口:cityfactory.javapublic interface cityfactory extends remotecity2impl getcityserver(string cityname) throws remoteexception;通过参数通过参数cityname创建动态服务器。创建动态服务器。网络编程技术第七次32六、实现工厂2. 定义远程接口定义远程接口city2.javapublic interface city2 extends remote int getpopulation( ) throws remoteexcep

29、tion;int gettemperature( ) throws remoteexception;n用工厂实现动态服务器时,在调用接口中的用工厂实现动态服务器时,在调用接口中的getpopulation()方法之前,由于已经生成某一方法之前,由于已经生成某一cityname的城市服务器,故这的城市服务器,故这里调用这些方法时不需要再进行参数传递。里调用这些方法时不需要再进行参数传递。网络编程技术第七次33六、实现工厂3. 实现远程接口实现远程接口city2impl.javamain()去哪里了?去哪里了?网络编程技术第七次34六、实现工厂3. 实现远程接口实现远程接口city2impl.ja

30、va功能:根据工厂给出的城市名功能:根据工厂给出的城市名cityname,使用该类创建一,使用该类创建一个信息服务器实例个信息服务器实例构造方法:被工厂方法调用,构造方法:被工厂方法调用,以为指定的城市名以为指定的城市名cityname初始化一个服务器程序初始化一个服务器程序网络编程技术第七次35六、实现工厂4. 实现实现cityfactory接口接口cityfactoryimpl.java根据参数根据参数cityname返返回不同的服务器实例回不同的服务器实例n安全管理器安全管理器n向向rmi注册表注册注册表注册n产生桩和架构产生桩和架构网络编程技术第七次36六、实现工厂5. 调用接口调用接

31、口city2app.java生成服务器实例生成服务器实例调用服务器实例方法调用服务器实例方法5. 调用接口调用接口city2app.java网络编程技术第七次37六、实现工厂6. 类文件结构及相互关系类文件结构及相互关系cityfactoryimplgetcityserver(cityname)main():注册,桩,架构city2appnaming.lookup名字空间查询new cityfactoryimpl().getcityserver(ottawa)ottawapopulation=ottawa.getpopulation();city2implgetpopulation()gett

32、emperature()city2getpopulation()gettemperature()cityfactorygetcityserver(cityname)rmi注册表注册表ottawa实例实例getpopulation()gettemperature()网络编程技术第七次38六、实现工厂7. 运行工厂运行工厂n1)编译文件)编译文件n2)生成桩,架构,注册)生成桩,架构,注册n3)运行客户端程序)运行客户端程序网络编程技术第七次39七、实现回调1. 回调概述回调概述n回调是对程序员所定义方法的调用,它被应用程序执行,以回调是对程序员所定义方法的调用,它被应用程序执行,以对用户的操作作

33、出响应。对用户的操作作出响应。okbtn.addactionlistener(this);public void actionperformed(actionevent e)if(e.getsource()=okbtn)eventhandle();n在在java中,一般通过使用接口以及实现该接口的类,来实现中,一般通过使用接口以及实现该接口的类,来实现回调。回调。class guessnumber implements actionlistener 网络编程技术第七次40七、实现回调2. rmi中实现回调中实现回调n回调可用于许多场合中,如一个城市的温度信息到达城市信回调可用于许多场合中,如一

34、个城市的温度信息到达城市信息服务器后,该服务器的客户端想要更新它,所以客户端需息服务器后,该服务器的客户端想要更新它,所以客户端需要一个方法,以便在服务器端有新的信息出现时,服务器程要一个方法,以便在服务器端有新的信息出现时,服务器程序可以调用它:定义一个客户回调接口。序可以调用它:定义一个客户回调接口。回调回调对象对象客户客户对象对象服务器服务器调用调用回调回调网络编程技术第七次41七、实现回调3. 定义客户回调接口定义客户回调接口callback.javapublic interface callback void tempchanged(string cityname, int temp

35、);n参数为城市名和城市温度,当该方法被服务器回调时,客户参数为城市名和城市温度,当该方法被服务器回调时,客户端将根据到达的服务器的新信息,显示该城市的新温度。端将根据到达的服务器的新信息,显示该城市的新温度。n为了让服务器将更新信息发送给客户端,必须发送一个为了让服务器将更新信息发送给客户端,必须发送一个callback类型的对象到服务器,以便服务器进行回调。类型的对象到服务器,以便服务器进行回调。n所以将所以将city接口修改为接口修改为callcity接口接口网络编程技术第七次42七、实现回调3. 修改修改city接口:接口:callcity.javapublic interface c

36、allcity extends remoteint getpopulation(string cityname) throws remoteexception;int gettemperature(string cityname) throws remoteexception;void register(callback cb) throws remoteexception;网络编程技术第七次43七、实现回调3. 实现实现callback接口:接口:callcityapp.javapublic class callcityapp implements callback, serializabl

37、e public static void main(string args) int pop = 0; try callcity obj = (callcity) naming.lookup(rmi:/:1099/callcityimpl); pop = obj.getpopulation(toronto); catch (exception e) e.printstacktrace(); system.out.println(the population of toronto is: + pop);public void tempchanged(string citynam

38、e, int temp)system.out.println(dynamic update:);system.out.println(cityname:+cityname);system.out.println(temp:+temp);客户程序通过显示接收到的新客户程序通过显示接收到的新信息,提供信息,提供callback接口的一接口的一个简单实现。个简单实现。网络编程技术第七次44七、实现回调3. 城市信息服务器:城市信息服务器:callcityimpl.javan需要对城市信息服务器进行修改,以在需要对城市信息服务器进行修改,以在city接口中实现新的方接口中实现新的方法法register

39、,服务器端维护一个当新信息到达服务器时需要回调,服务器端维护一个当新信息到达服务器时需要回调的客户列表。的客户列表。public class callcityimpl extends unicastremoteobject implements callcityvector list=new vector();private string name;public callcityimpl(string name) throws remoteexception public int getpopulation(string cityname) throws remoteexceptionpublic void register(callback cb)public static void main(string args)网络编程技术第七次45七、实现回调3. 城市信息服务器:城市信息服务器:callcityimpl.javapublic callcityimpl(string name) throws remoteexception super(); =name;public int getpopulation(string citynam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论