网络编程技术第七次.ppt

上传人:wuy****n92 文档编号:73986275 上传时间:2023-02-23 格式:PPT 页数:50 大小:525.50KB
返回 下载 相关 举报
网络编程技术第七次.ppt_第1页
第1页 / 共50页
网络编程技术第七次.ppt_第2页
第2页 / 共50页
点击查看更多>>
资源描述

《网络编程技术第七次.ppt》由会员分享,可在线阅读,更多相关《网络编程技术第七次.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、接口抽象为一个本地的过程调用。一个本地的过程调用。uRMI是可用于开发分布式程序的是可用于开发分布式程序的JDK核心包。核心包。在所在所编写的分布式程序中,其写的分布式程序中,其远程程对象的方法能象的方法能够被运被运行在不同主机上的其他行在不同主机上的其他Java虚虚拟机的方法机的方法调用。用。当所有参数被当所有参数被传递给远程目程目标并被解并被解释,然后将,然后将结果返果返回回给调用者。用者。这个个过程程给程序程序员一个一个错觉:以:以为是从本地是从本地类文件中文件中调用用一个本地方法。一个本地方法。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1、什么是、什么是RMI

3、一、RMI概述RMI是指远程方法调用,将客户和服务器间的接口抽象为是指远程方法调用,将客户和服务器间的接口抽象为一个本地的过程调用。一个本地的过程调用。对象对象应用程序应用程序本地本地调用用机器机器A对象对象对象对象机器机器B对象对象网络网络远程程调用用计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1、什么是、什么是RMI一、RMI概述RMI的特征:的特征:透明调用透明调用分布的垃圾回收分布的垃圾回收对流的方便访问对流的方便访问对象对象应用程序应用程序本地本地调用用机器机器A对象对象对象对象机器机器B对象对象网络网络远程程调用用计算机科学与技术学院网络工程教研室计算机科学

4、与技术学院网络工程教研室1、RMI系统组成系统组成二、RMI体系结构RMI系统有三层组成系统有三层组成桩桩/架构(架构(stub/skeleton)远程引用层远程引用层传输层传输层桩桩构架构架远程引用层远程引用层传输层传输层服务器服务器客户客户计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、RMI系统组成:桩系统组成:桩/架构层架构层二、RMI体系结构桩桩/架构层是应用程序与系统其他部分的接口架构层是应用程序与系统其他部分的接口当完成服务器应用程序开发后,就是用当完成服务器应用程序开发后,就是用RMI的的misc编译器产编译器产生桩生桩/架构层,它根据服务器程序的字节代

5、码,产生代理类。架构层,它根据服务器程序的字节代码,产生代理类。桩是客是客户端的代理,端的代理,桩允允许客客户与系与系统的其它的其它层通信。通信。架构是服架构是服务器端的入口器端的入口计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、RMI系统组成:桩系统组成:桩/架构层架构层二、RMI体系结构桩桩/架构层是应用程序与系统其他部分的接口架构层是应用程序与系统其他部分的接口远程对象远程对象客户端桩客户端桩的任务的任务初始化初始化远程程调用用序列化序列化发送参数送参数指示指示远程引用程引用层将要将要进行行调用用反序列化返回反序列化返回值提示提示远程程传输层调用完成用完成计算机

6、科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、RMI系统组成:桩系统组成:桩/架构层架构层二、RMI体系结构桩桩/架构层是应用程序与系统其他部分的接口架构层是应用程序与系统其他部分的接口服务器端服务器端架构架构的任务的任务反序列化客反序列化客户端端输入的参数入的参数调用用实际的的远程程对象象实现将返回将返回值序列化序列化为流以流以传输给客客户计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室3、RMI系统组成:远程调用层系统组成:远程调用层二、RMI体系结构远程调用层远程调用层是桩是桩/架构层和传输层的中间层架构层和传输层的中间层远程调用层负责为独立于客户

7、桩和服务器架构的多种形远程调用层负责为独立于客户桩和服务器架构的多种形式的远程调用和调用协议提供支持。式的远程调用和调用协议提供支持。单点点传送送协议可能提供点可能提供点对点的点的调用用多点多点传输协议提供提供对复制的成复制的成组对象的象的调用。用。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室二、RMI体系结构4、RMI系统组成:传输层系统组成:传输层传输层负责建立到远程地址空间的连接传输层负责建立到远程地址空间的连接管理连接管理连接监听外来调用监听外来调用维护驻留于同一个地址空间的远程对象表维护驻留于同一个地址空间的远程对象表为外来的调用建立连接,以及根据远程调用的目

8、的定为调为外来的调用建立连接,以及根据远程调用的目的定为调度程序,并传递连接给该调度程序。度程序,并传递连接给该调度程序。同一个地址空同一个地址空间可以支持可以支持TCP和和UDP两种两种协议。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1、RMI工作过程工作过程三、RMI工作机制通常,调用通过桩通常,调用通过桩/架构层传递,架构层传递,桩桩/架构层架构层作为应用程序作为应用程序与与RMI系统的其他部分的一个接口来提供服务:通过序列系统的其他部分的一个接口来提供服务:通过序列化流,将数据传输到化流,将数据传输到远程引用层远程引用层。一旦数据通过一旦数据通过桩桩/架构层传

9、递架构层传递,它将通过,它将通过远程引用层远程引用层,远,远程引用层实现了调用的语义,把数据传输到程引用层实现了调用的语义,把数据传输到传输层传输层。最后,数据到达最后,数据到达传输层传输层。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1、创建、创建RMI应用程序的步骤应用程序的步骤四、一个简单的RMI例子1)定义一个远程接口)定义一个远程接口2)实现远程接口和服务器)实现远程接口和服务器3)使用远程接口开发一个客户程序)使用远程接口开发一个客户程序4)产生桩和架构)产生桩和架构5)启动)启动RMI注册表注册表6)运行服务器程序和客户程序)运行服务器程序和客户程序计算机

10、科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、应用举例:定义一个远程接口、应用举例:定义一个远程接口四、一个简单的RMI例子设计一个接口时需要考虑所要支持的方法和每一个方法所设计一个接口时需要考虑所要支持的方法和每一个方法所需的参数。需的参数。客客户通通过远程接口了解服程接口了解服务器提供的方法以及如何器提供的方法以及如何调用用这些方法。些方法。RMI使用异常来使用异常来报告告错误信息:如由于服信息:如由于服务器关机,超器关机,超载等原因无法和服等原因无法和服务器建立器建立连接。接。远程对象需要声明为远程对象需要声明为public的,并扩展接口的,并扩展接口接口中的每一个方

11、法都必须声明为接口中的每一个方法都必须声明为java.rmi,throws一句一句中必须抛出中必须抛出RemoteException异常。异常。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、应用举例、应用举例-算术服务器:算术服务器:定义一个远程接口定义一个远程接口四、一个简单的RMI例子public interface Arith extends int add(int a,int b)throws java.rmi.RemoteException;远程对象需要声明为远程对象需要声明为public的的扩展接口扩展接口接口中的每一个方法都必须声明为接口中的每一个方法都

12、必须声明为java.rmi,throws一句一句中必须抛出中必须抛出RemoteException异常。异常。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、应用举例、应用举例-算术服务器:算术服务器:实现远程接口实现远程接口四、一个简单的RMI例子指定要执行的远程接口指定要执行的远程接口定义远程对象成员器定义远程对象成员器实现能被远程调用的方法实现能被远程调用的方法创建一个安全管理器的实例,并安装它创建一个安全管理器的实例,并安装它创建远程对象的一个或多个实例创建远程对象的一个或多个实例注册一个远程对象到注册一个远程对象到RMI注册器注册器public class A

13、rithImpl extends UnicastRemoteObject implements Arith private String objectName;public ArithImpl(String s)throws RemoteException public int add(int a,int b)public static void main(String args)计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、应用举例、应用举例-算术服务器:算术服务器:实现远程接口实现远程接口四、一个简单的RMI例子public class ArithImpl ext

14、ends UnicastRemoteObject implements Arith private String objectName;public ArithImpl(String s)throws RemoteException super();objectName=s;public int add(int a,int b)int c=new int10;for(int i=0;i 10;i+)ci=ai+bi;return c;ArithImpl用于创建一个单一用于创建一个单一的、非复制远程对象,使用的、非复制远程对象,使用RMI默认的基于默认的基于Socket的传输的传输实现接口方法,

15、传递两个整型实现接口方法,传递两个整型数组给数组给add()方法,返回一个整方法,返回一个整型数组。型数组。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、应用举例、应用举例-算术服务器:算术服务器:实现远程接口实现远程接口四、一个简单的RMI例子public class ArithImpl extends UnicastRemoteObject implements Arith public static void main(String args)RMISecurityManager sm=new RMISecurityManager();System.setSec

16、urityManager(sm);try ArithImpl obj=new ArithImpl(ArithServer);Naming.rebind(rmi:/127.0.0.1:1099/ArithServer,obj);System.out.println(ArithServer bound in registry);catch(Exception e)System.out.println(ArithImpl error:+e.getMessage();e.printStackTrace();创建并安装一个安全管理器,保护主机不受客创建并安装一个安全管理器,保护主机不受客户恶意代码的损坏

17、。户恶意代码的损坏。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、应用举例、应用举例-算术服务器:算术服务器:实现远程接口实现远程接口四、一个简单的RMI例子ArithImpl obj=new ArithImpl(ArithServer);创建远程对象实例,服务器准备好监听客户的请求。创建远程对象实例,服务器准备好监听客户的请求。Naming.rebind(rmi:/127.0.0.1:1099/ArithServer,obj);将远程对象注册到将远程对象注册到RMI注册表中,以便客户获得对远程注册表中,以便客户获得对远程对象的引用,能够调用远程对象中的方法。对象的引

18、用,能够调用远程对象中的方法。RMI系统提供了一个基于系统提供了一个基于URL注册的解决方法,以注册的解决方法,以/host/objectName的形式绑定对象。的形式绑定对象。1099是是RMI注册表运行的默注册表运行的默认的端口号。的端口号。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2、应用举例、应用举例-算术服务器:算术服务器:使用远程接口开发客户程序使用远程接口开发客户程序:ArithApp.java四、一个简单的RMI例子客户必须首先从服务程序的客户必须首先从服务程序的注册表中获得对注册表中获得对ArithServer的的引用,然后远程调用方法引用,然后远程

19、调用方法add,将数组,将数组a和和b相加,将返回值相加,将返回值保存在新数组保存在新数组result中。中。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室3、调试运行过程、调试运行过程四、一个简单的RMI例子1)编译接口和类文件)编译接口和类文件2)产生桩和架构)产生桩和架构编写完所有的代码后,就需要产生桩和架构。编写完所有的代码后,就需要产生桩和架构。桩和架构在运行时确定,并根据需要动态加载。桩和架构在运行时确定,并根据需要动态加载。客户客户网络网络桩桩客户客户桩桩计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室3、调试运行过程、调试运行过程四、一

20、个简单的RMI例子3)启动)启动RMI注册表注册表RMI注册表是一个名字服务,允许客户程序对远程对象进行注册表是一个名字服务,允许客户程序对远程对象进行引用。引用。RMI注册表可以看做是注册表可以看做是RMI远程对象引用的管理器。远程对象引用的管理器。客户客户远程对象远程对象RMI注册表注册表2.查询查询1.注册注册3.调用方法调用方法运行注册表,并使之监运行注册表,并使之监听默认的听默认的1099端口端口计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室3、调试运行过程、调试运行过程四、一个简单的RMI例子4)运行服务程序和客户程序)运行服务程序和客户程序计算机科学与技术学

21、院网络工程教研室计算机科学与技术学院网络工程教研室4、调试过程中可能出现的问题及解决方案、调试过程中可能出现的问题及解决方案四、一个简单的RMI例子1)错误一:)错误一:原因:无法解析和连接到原因:无法解析和连接到的的1099端口上,原因是设置了安端口上,原因是设置了安全管理器全管理器System.setSecurityManager(new RMISecurityManager();,可是又没有设置访问的策略,可是又没有设置访问的策略计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室4、调试过程中可能出现的问题及解决方案、调试过程中可能出现的问题及解决方案四、一个简单的RM

22、I例子1)错误一:)错误一:解决办法:解决办法:1)把代码)把代码System.setSecurityManager(new RMISecurityManager();去掉,不设置安全管理器去掉,不设置安全管理器2)修改)修改JRE的安全策略文件,在的安全策略文件,在Eclipse中用中用JDK是是c:Javajdk1.5.0_06,相应的安全策略文件就是相应的安全策略文件就是c:javajdk1.5.0_06jrelibsecurityjava.policy,计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室五、第二个例题五、第二个例题1.例题例题2:城市信息服务器:城市信

23、息服务器城市信息服务器提供某一城市人口和温度的查询,客户通城市信息服务器提供某一城市人口和温度的查询,客户通过输入城市名可以获取该城市的人口数和温度等信息。过输入城市名可以获取该城市的人口数和温度等信息。u简单代码实现简单代码实现定定义远程接口:程接口:City.java实现远程接口:程接口:CityImpl.java开开发客客户端程序:端程序:CityApp.javau运行该程序:运行该程序:编译上述三个上述三个类文件文件产生生桩和架构和架构启启动RMI注册注册运行服运行服务器和客器和客户程序程序计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1.例题例题2:城市信息服务

24、器:城市信息服务器u运行界面运行界面五、第二个例题五、第二个例题计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1.例题例题2:城市信息服务器:城市信息服务器u类文件结构及其相互关系类文件结构及其相互关系public interface City extends Remotepublic class CityImpl extends UnicastRemoteObject implements Citypublic class CityApp 客户客户远程对象远程对象RMI注册表注册表2.查询查询1.注册注册3.调用方法调用方法五、第二个例题五、第二个例题计算机科学与技术学

25、院网络工程教研室计算机科学与技术学院网络工程教研室1.例题例题2:城市信息服务器:城市信息服务器u类文件结构及其相互关系类文件结构及其相互关系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.

26、rebind(rmi:/127.0.0.1:1099/CityServer,obj);System.out.println(cityServer bound in registry!);public class CityApp City obj=(City)Naming.lookup(rmi:/127.0.0.1:1099/CityServer);pop=obj.getPopulation(Toronto);System.out.println(The population of Toronto is:+pop);远程对象远程对象注册注册查询远程对象查询远程对象调用其方法调用其方法五、第二个例

27、题五、第二个例题计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室2.例题例题2:城市信息服务器分析:城市信息服务器分析由于由于CityImpl.java继承了继承了UnicastRemotObject,所以,所以RMI客户无法启动客户无法启动RMI服务器程序及其创建它的实例。服务器程序及其创建它的实例。public class CityImpl extends UnicastRemoteObject implements City u如果用一个城市信息服务器来处理与所有城市相关的信息,如果用一个城市信息服务器来处理与所有城市相关的信息,会导致服务器过载,解决这一问题,可以为

28、每个城市创建一个会导致服务器过载,解决这一问题,可以为每个城市创建一个不同的不同的CityImpl服务器,要求该服务器只处理与该城市有关的服务器,要求该服务器只处理与该城市有关的信息请求。信息请求。u通过工厂通过工厂Factory,创建动态服务器:客户程序中能够启动,创建动态服务器:客户程序中能够启动服务器程序及实例化该对象。服务器程序及实例化该对象。五、第二个例题五、第二个例题计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室六、实现工厂1.工厂概述及工厂接口定义工厂概述及工厂接口定义u使用工厂,可以创建远程对象的多个实例,并使它们能够相使用工厂,可以创建远程对象的多个实例

29、,并使它们能够相互调用。互调用。u工厂只有一个负责创建对象的方法,该方法所创建的对象以工厂只有一个负责创建对象的方法,该方法所创建的对象以后将被客户程序作为一般的服务器程序来使用。后将被客户程序作为一般的服务器程序来使用。u定义工厂接口:定义工厂接口:CityFactory.javapublic interface CityFactory extends RemoteCity2Impl getCityServer(String cityName)throws RemoteException;通通过参数参数cityName创建建动态服服务器。器。计算机科学与技术学院网络工程教研室计算机科学与技术

30、学院网络工程教研室六、实现工厂2.定义远程接口定义远程接口City2.javapublic interface City2 extends Remote int getPopulation()throws RemoteException;int getTemperature()throws RemoteException;u用工厂实现动态服务器时,在调用接口中的用工厂实现动态服务器时,在调用接口中的getPopulation()方法之前,由于已经生成某一方法之前,由于已经生成某一cityName的城市服务器,故这的城市服务器,故这里调用这些方法时不需要再进行参数传递。里调用这些方法时不需要再进

31、行参数传递。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室六、实现工厂3.实现远程接口实现远程接口City2Impl.javamain()去哪里了?去哪里了?计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室六、实现工厂3.实现远程接口实现远程接口City2Impl.java功能:根据工厂给出的城市名功能:根据工厂给出的城市名cityName,使用该类创建一,使用该类创建一个信息服务器实例个信息服务器实例构造方法:被工厂方法调用,构造方法:被工厂方法调用,以为指定的城市名以为指定的城市名cityName初始化一个服务器程序初始化一个服务器程序计算机科学与

32、技术学院网络工程教研室计算机科学与技术学院网络工程教研室六、实现工厂4.实现实现CityFactory接口接口CityFactoryImpl.java根据参数根据参数cityName返返回不同的服务器实例回不同的服务器实例安全管理器安全管理器向向RMI注册表注册注册表注册产生桩和架构产生桩和架构计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室六、实现工厂5.调用接口调用接口City2App.java生成服务器实例生成服务器实例调用服务器实例方法调用服务器实例方法5.调用接口调用接口City2App.java计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室

33、六、实现工厂6.类文件结构及相互关系类文件结构及相互关系CityFactoryImplgetCityServer(cityName)main():注册,桩,架构City2AppNaming.lookup名字空间查询new CityFactoryImpl().getCityServer(Ottawa)ottawaPopulation=ottawa.getPopulation();City2ImplgetPopulation()getTemperature()City2getPopulation()getTemperature()CityFactorygetCityServer(cityName)

34、RMI注册表注册表Ottawa实例实例getPopulation()getTemperature()计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室六、实现工厂7.运行工厂运行工厂1)编译文件)编译文件2)生成桩,架构,注册)生成桩,架构,注册3)运行客户端程序)运行客户端程序计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调1.回调概述回调概述u回调是对程序员所定义方法的调用,它被应用程序执行,以回调是对程序员所定义方法的调用,它被应用程序执行,以对用户的操作作出响应。对用户的操作作出响应。okBtn.addActionListener(th

35、is);public void actionPerformed(ActionEvent e)if(e.getSource()=okBtn)eventHandle();u在在Java中,一般通过使用接口以及实现该接口的类,来实现中,一般通过使用接口以及实现该接口的类,来实现回调。回调。class GuessNumber implements ActionListener 计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调2.RMI中实现回调中实现回调u回调可用于许多场合中,如一个城市的温度信息到达城市信回调可用于许多场合中,如一个城市的温度信息到达城市信息服务器后,

36、该服务器的客户端想要更新它,所以客户端需要息服务器后,该服务器的客户端想要更新它,所以客户端需要一个方法,以便在服务器端有新的信息出现时,服务器程序可一个方法,以便在服务器端有新的信息出现时,服务器程序可以调用它:定义一个客户回调接口。以调用它:定义一个客户回调接口。回调回调对象对象客户客户对象对象服务器服务器调用调用回调回调计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调3.定义客户回调接口定义客户回调接口Callback.javapublic interface Callback void tempChanged(String cityName,int te

37、mp);u参数为城市名和城市温度,当该方法被服务器回调时,客户参数为城市名和城市温度,当该方法被服务器回调时,客户端将根据到达的服务器的新信息,显示该城市的新温度。端将根据到达的服务器的新信息,显示该城市的新温度。u为了让服务器将更新信息发送给客户端,必须发送一个为了让服务器将更新信息发送给客户端,必须发送一个Callback类型的对象到服务器,以便服务器进行回调。类型的对象到服务器,以便服务器进行回调。u所以将所以将City接口修改为接口修改为CallCity接口接口计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调3.修改修改City接口:接口:CallCit

38、y.javapublic interface CallCity extends Remoteint getPopulation(String cityName)throws RemoteException;int getTemperature(String cityName)throws RemoteException;void register(Callback cb)throws RemoteException;计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调3.实现实现Callback接口:接口:CallCityApp.javapublic class C

39、allCityApp implements Callback,Serializable public static void main(String args)int pop=0;try CallCity obj=(CallCity)Naming.lookup(rmi:/127.0.0.1:1099/CallCityImpl);pop=obj.getPopulation(Toronto);catch(Exception e)e.printStackTrace();System.out.println(The population of Toronto is:+pop);public void

40、tempChanged(String cityName,int temp)System.out.println(Dynamic Update:);System.out.println(CityName:+cityName);System.out.println(Temp:+temp);客户程序通过显示接收到的新客户程序通过显示接收到的新信息,提供信息,提供Callback接口的一接口的一个简单实现。个简单实现。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调3.城市信息服务器:城市信息服务器:CallCityImpl.javau需要对城市信息服务器进行修改,以在

41、需要对城市信息服务器进行修改,以在City接口中实现新的方接口中实现新的方法法register,服务器端维护一个当新信息到达服务器时需要回调,服务器端维护一个当新信息到达服务器时需要回调的客户列表。的客户列表。public class CallCityImpl extends UnicastRemoteObject implements CallCityVector list=new Vector();private String name;public CallCityImpl(String name)throws RemoteException public int getPopulati

42、on(String cityName)throws RemoteExceptionpublic void register(Callback cb)public static void main(String args)计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调3.城市信息服务器:城市信息服务器:CallCityImpl.javapublic CallCityImpl(String name)throws RemoteException super();this.name=name;public int getPopulation(String cityN

43、ame)throws RemoteException if(cityName.equals(Toronto)return 10;else if(cityName.equals(Ottawa)return 2;else return 0;public int getTemperature(String cityName)throws RemoteExceptionreturn 1;计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调3.城市信息服务器:城市信息服务器:CallCityImpl.javapublic void register(Callback cb)l

44、ist.addElement(cb);public static void main(String args)System.setSecurityManager(new RMISecurityManager();try CallCityImpl obj=new CallCityImpl(CallCityImpl);Naming.rebind(rmi:/127.0.0.1:1099/CallCityImpl,obj);System.out.println(cityServer bound in registry!);catch(Exception e)e.printStackTrace();计算

45、机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调3.继续修改客户端代码:继续修改客户端代码:CallCity2App.javau为了进行回调,客户端需要注册到服务器中,所以需要在客为了进行回调,客户端需要注册到服务器中,所以需要在客户端增加一个调用远程对象的方法。户端增加一个调用远程对象的方法。计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调3.继续修改服务器代码:继续修改服务器代码:CallCity2Impl.javau服务器端为了实际调用一个回调,需要增加一个方法,使其服务器端为了实际调用一个回调,需要增加一个方法,使其能够接受发

46、送给客户后的变化。能够接受发送给客户后的变化。u该方法有城市名和温度两个参数,它将重复需要提醒变化的、该方法有城市名和温度两个参数,它将重复需要提醒变化的、已经注册的客户列表,并为它们调用新的方法。已经注册的客户列表,并为它们调用新的方法。public void setTemp(String cityName,int tmp)for(int i=0;ilist.size();i+)Callback cb=(Callback)list.elementAt(i);cb.tempChanged(cityName,tmp);计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室七、实现回调4.代码运行代码运行计算机科学与技术学院网络工程教研室计算机科学与技术学院网络工程教研室1、RMI程序的编写步骤以及调试运行过程程序的编写步骤以及调试运行过程2、请根据例题,在例题中补充下述功能:、请根据例题,在例题中补充下述功能:ArithImpl.java中能够进行加、减、乘、除运算中能够进行加、减、乘、除运算ArithApp.java中:两组参加运算的数组值是通过键盘录中:两组参加运算的数组值是通过键盘录入的入的八、思考和作业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁