欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    网络编程技术第七次.ppt

    • 资源ID:6016916       资源大小:525.50KB        全文页数:50页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    网络编程技术第七次.ppt

    第七次课 RMI,RMI,一、RMI概述,二、RMI体系结构,七、实现回调,三、RMI工作机制,四、一个简单的RMI例子,五、第二个例题,六、实现工厂,八、思考和作业,一、什么是RMI,一、RMI概述,RMI是指远程方法调用,将客户和服务器间的接口抽象为一个本地的过程调用。RMI是可用于开发分布式程序的JDK核心包。在所编写的分布式程序中,其远程对象的方法能够被运行在不同主机上的其他Java虚拟机的方法调用。当所有参数被传递给远程目标并被解释,然后将结果返回给调用者。这个过程给程序员一个错觉:以为是从本地类文件中调用一个本地方法。,1、什么是RMI,一、RMI概述,RMI是指远程方法调用,将客户和服务器间的接口抽象为一个本地的过程调用。,对象,应用程序,本地调用,机器A,对象,对象,机器B,对象,网络,远程调用,1、什么是RMI,一、RMI概述,RMI的特征:透明调用分布的垃圾回收对流的方便访问,对象,应用程序,本地调用,机器A,对象,对象,机器B,对象,网络,远程调用,1、RMI系统组成,二、RMI体系结构,RMI系统有三层组成桩/架构(stub/skeleton)远程引用层传输层,桩,构架,远程引用层,传输层,服务器,客户,2、RMI系统组成:桩/架构层,二、RMI体系结构,桩/架构层是应用程序与系统其他部分的接口当完成服务器应用程序开发后,就是用RMI的misc编译器产生桩/架构层,它根据服务器程序的字节代码,产生代理类。桩是客户端的代理,桩允许客户与系统的其它层通信。架构是服务器端的入口,2、RMI系统组成:桩/架构层,二、RMI体系结构,桩/架构层是应用程序与系统其他部分的接口远程对象客户端桩的任务初始化远程调用序列化发送参数指示远程引用层将要进行调用反序列化返回值提示远程传输层调用完成,2、RMI系统组成:桩/架构层,二、RMI体系结构,桩/架构层是应用程序与系统其他部分的接口服务器端架构的任务反序列化客户端输入的参数调用实际的远程对象实现将返回值序列化为流以传输给客户,3、RMI系统组成:远程调用层,二、RMI体系结构,远程调用层是桩/架构层和传输层的中间层远程调用层负责为独立于客户桩和服务器架构的多种形式的远程调用和调用协议提供支持。单点传送协议可能提供点对点的调用多点传输协议提供对复制的成组对象的调用。,二、RMI体系结构,4、RMI系统组成:传输层,传输层负责建立到远程地址空间的连接管理连接监听外来调用维护驻留于同一个地址空间的远程对象表为外来的调用建立连接,以及根据远程调用的目的定为调度程序,并传递连接给该调度程序。同一个地址空间可以支持TCP和UDP两种协议。,1、RMI工作过程,三、RMI工作机制,通常,调用通过桩/架构层传递,桩/架构层作为应用程序与RMI系统的其他部分的一个接口来提供服务:通过序列化流,将数据传输到远程引用层。一旦数据通过桩/架构层传递,它将通过远程引用层,远程引用层实现了调用的语义,把数据传输到传输层。最后,数据到达传输层。,1、创建RMI应用程序的步骤,四、一个简单的RMI例子,1)定义一个远程接口2)实现远程接口和服务器3)使用远程接口开发一个客户程序4)产生桩和架构5)启动RMI注册表6)运行服务器程序和客户程序,2、应用举例:定义一个远程接口,四、一个简单的RMI例子,设计一个接口时需要考虑所要支持的方法和每一个方法所需的参数。客户通过远程接口了解服务器提供的方法以及如何调用这些方法。RMI使用异常来报告错误信息:如由于服务器关机,超载等原因无法和服务器建立连接。远程对象需要声明为public的,并扩展接口接口中的每一个方法都必须声明为java.rmi,throws一句中必须抛出RemoteException异常。,2、应用举例-算术服务器:定义一个远程接口,四、一个简单的RMI例子,public interface Arith extends int add(int a,int b)throws java.rmi.RemoteException;,远程对象需要声明为public的扩展接口接口中的每一个方法都必须声明为java.rmi,throws一句中必须抛出RemoteException异常。,2、应用举例-算术服务器:实现远程接口,四、一个简单的RMI例子,指定要执行的远程接口定义远程对象成员器实现能被远程调用的方法创建一个安全管理器的实例,并安装它创建远程对象的一个或多个实例注册一个远程对象到RMI注册器,public class ArithImpl 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 extends 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的传输,实现接口方法,传递两个整型数组给add()方法,返回一个整型数组。,2、应用举例-算术服务器:实现远程接口,四、一个简单的RMI例子,public class ArithImpl extends 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:/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();,创建并安装一个安全管理器,保护主机不受客户恶意代码的损坏。,2、应用举例-算术服务器:实现远程接口,四、一个简单的RMI例子,ArithImpl obj=new ArithImpl(ArithServer);,创建远程对象实例,服务器准备好监听客户的请求。,Naming.rebind(rmi:/127.0.0.1:1099/ArithServer,obj);,将远程对象注册到RMI注册表中,以便客户获得对远程对象的引用,能够调用远程对象中的方法。RMI系统提供了一个基于URL注册的解决方法,以/host/objectName的形式绑定对象。1099是RMI注册表运行的默认的端口号。,2、应用举例-算术服务器:使用远程接口开发客户程序:ArithApp.java,四、一个简单的RMI例子,客户必须首先从服务程序的注册表中获得对ArithServer的引用,然后远程调用方法add,将数组a和b相加,将返回值保存在新数组result中。,3、调试运行过程,四、一个简单的RMI例子,1)编译接口和类文件,2)产生桩和架构编写完所有的代码后,就需要产生桩和架构。桩和架构在运行时确定,并根据需要动态加载。,客户,网络,桩,客户,桩,3、调试运行过程,四、一个简单的RMI例子,3)启动RMI注册表RMI注册表是一个名字服务,允许客户程序对远程对象进行引用。RMI注册表可以看做是RMI远程对象引用的管理器。,运行注册表,并使之监听默认的1099端口,3、调试运行过程,四、一个简单的RMI例子,4)运行服务程序和客户程序,4、调试过程中可能出现的问题及解决方案,四、一个简单的RMI例子,1)错误一:,原因:无法解析和连接到的1099端口上,原因是设置了安全管理器System.setSecurityManager(new RMISecurityManager();,可是又没有设置访问的策略,4、调试过程中可能出现的问题及解决方案,四、一个简单的RMI例子,1)错误一:,解决办法:1)把代码System.setSecurityManager(new RMISecurityManager();去掉,不设置安全管理器2)修改JRE的安全策略文件,在Eclipse中用JDK是c:Javajdk1.5.0_06,相应的安全策略文件就是c:javajdk1.5.0_06jrelibsecurityjava.policy,五、第二个例题,1.例题2:城市信息服务器,城市信息服务器提供某一城市人口和温度的查询,客户通过输入城市名可以获取该城市的人口数和温度等信息。简单代码实现定义远程接口:City.java实现远程接口:CityImpl.java开发客户端程序:CityApp.java运行该程序:编译上述三个类文件产生桩和架构启动RMI注册运行服务器和客户程序,1.例题2:城市信息服务器,运行界面,五、第二个例题,1.例题2:城市信息服务器,类文件结构及其相互关系,public interface City extends Remote,public class CityImpl extends UnicastRemoteObject implements City,public class CityApp,客户,远程对象,RMI注册表,2.查询,1.注册,3.调用方法,五、第二个例题,1.例题2:城市信息服务器,类文件结构及其相互关系,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:/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);,远程对象,注册,查询远程对象,调用其方法,五、第二个例题,2.例题2:城市信息服务器分析,由于CityImpl.java继承了UnicastRemotObject,所以RMI客户无法启动RMI服务器程序及其创建它的实例。,public class CityImpl extends UnicastRemoteObject implements City,如果用一个城市信息服务器来处理与所有城市相关的信息,会导致服务器过载,解决这一问题,可以为每个城市创建一个不同的CityImpl服务器,要求该服务器只处理与该城市有关的信息请求。通过工厂Factory,创建动态服务器:客户程序中能够启动服务器程序及实例化该对象。,五、第二个例题,六、实现工厂,1.工厂概述及工厂接口定义,使用工厂,可以创建远程对象的多个实例,并使它们能够相互调用。工厂只有一个负责创建对象的方法,该方法所创建的对象以后将被客户程序作为一般的服务器程序来使用。定义工厂接口:CityFactory.javapublic interface CityFactory extends RemoteCity2Impl getCityServer(String cityName)throws RemoteException;通过参数cityName创建动态服务器。,六、实现工厂,2.定义远程接口City2.java,public interface City2 extends Remote int getPopulation()throws RemoteException;int getTemperature()throws RemoteException;,用工厂实现动态服务器时,在调用接口中的getPopulation()方法之前,由于已经生成某一cityName的城市服务器,故这里调用这些方法时不需要再进行参数传递。,六、实现工厂,3.实现远程接口City2Impl.java,main()去哪里了?,六、实现工厂,3.实现远程接口City2Impl.java,功能:根据工厂给出的城市名cityName,使用该类创建一个信息服务器实例,构造方法:被工厂方法调用,以为指定的城市名cityName初始化一个服务器程序,六、实现工厂,4.实现CityFactory接口CityFactoryImpl.java,根据参数cityName返回不同的服务器实例,安全管理器向RMI注册表注册产生桩和架构,六、实现工厂,5.调用接口City2App.java,生成服务器实例,调用服务器实例方法,5.调用接口City2App.java,六、实现工厂,6.类文件结构及相互关系,CityFactoryImplgetCityServer(cityName)main():注册,桩,架构,City2AppNaming.lookup名字空间查询new CityFactoryImpl().getCityServer(Ottawa)ottawaPopulation=ottawa.getPopulation();,City2ImplgetPopulation()getTemperature(),City2,getPopulation()getTemperature(),CityFactory,getCityServer(cityName),RMI注册表,Ottawa实例getPopulation()getTemperature(),六、实现工厂,7.运行工厂,1)编译文件,2)生成桩,架构,注册,3)运行客户端程序,七、实现回调,1.回调概述,回调是对程序员所定义方法的调用,它被应用程序执行,以对用户的操作作出响应。,okBtn.addActionListener(this);,public void actionPerformed(ActionEvent e)if(e.getSource()=okBtn)eventHandle();,在Java中,一般通过使用接口以及实现该接口的类,来实现回调。,class GuessNumber implements ActionListener,七、实现回调,2.RMI中实现回调,回调可用于许多场合中,如一个城市的温度信息到达城市信息服务器后,该服务器的客户端想要更新它,所以客户端需要一个方法,以便在服务器端有新的信息出现时,服务器程序可以调用它:定义一个客户回调接口。,调用,回调,七、实现回调,3.定义客户回调接口Callback.java,public interface Callback void tempChanged(String cityName,int temp);,参数为城市名和城市温度,当该方法被服务器回调时,客户端将根据到达的服务器的新信息,显示该城市的新温度。为了让服务器将更新信息发送给客户端,必须发送一个Callback类型的对象到服务器,以便服务器进行回调。所以将City接口修改为CallCity接口,七、实现回调,3.修改City接口:CallCity.java,public interface CallCity extends Remoteint getPopulation(String cityName)throws RemoteException;int getTemperature(String cityName)throws RemoteException;void register(Callback cb)throws RemoteException;,七、实现回调,3.实现Callback接口:CallCityApp.java,public class CallCityApp 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 tempChanged(String cityName,int temp)System.out.println(Dynamic Update:);System.out.println(CityName:+cityName);System.out.println(Temp:+temp);,客户程序通过显示接收到的新信息,提供Callback接口的一个简单实现。,七、实现回调,3.城市信息服务器:CallCityImpl.java,需要对城市信息服务器进行修改,以在City接口中实现新的方法register,服务器端维护一个当新信息到达服务器时需要回调的客户列表。public class CallCityImpl extends UnicastRemoteObject implements CallCityVector list=new Vector();private String name;public CallCityImpl(String name)throws RemoteExceptionpublic int getPopulation(String cityName)throws RemoteExceptionpublic void register(Callback cb)public static void main(String args),七、实现回调,3.城市信息服务器:CallCityImpl.java,public CallCityImpl(String name)throws RemoteException super();this.name=name;public int getPopulation(String cityName)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.java,public void register(Callback cb)list.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();,七、实现回调,3.继续修改客户端代码:CallCity2App.java,为了进行回调,客户端需要注册到服务器中,所以需要在客户端增加一个调用远程对象的方法。,七、实现回调,3.继续修改服务器代码:CallCity2Impl.java,服务器端为了实际调用一个回调,需要增加一个方法,使其能够接受发送给客户后的变化。该方法有城市名和温度两个参数,它将重复需要提醒变化的、已经注册的客户列表,并为它们调用新的方法。,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中:两组参加运算的数组值是通过键盘录入的,八、思考和作业,

    注意事项

    本文(网络编程技术第七次.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开