- 1、本文档共32页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据通信笫二十五讲 远程过程调用RPC和Java简介[精品]
* 练习题 9.39考虑一个SUN RPC的客户方发送一个请求给服务方。 a.在什么情况下客户方能够确信该请求正好只执行一次? b.假设希望在SUN RPC中增加“最多执行一次”的支持,需要作什么改动? 9.41设计一个Java程序,功能是显示一个gif格式的图片。 9.42在C语言中并没有定义整数占用的比特数,而在Java语言中则给出了整数总共32位。请讨论这两种方式。 * 《数据通信与计算机网络(第二版)》电子教案 笫二十五讲 远程过程调用RPC和Java简介 * 本讲内容 第九章 高层应用 9.4 远程过程调用RPC 9.4.1 RPC基本操作 9.4.2 RPC实例 9.5 对象化程序设计语言JAVA 9.5.1 Java特性 9.5.2 Java程序设计 9.5.3 小程序(Applet)设计和实现 9.5.4 一个简单的Client/Server程序* *是要求同学了解的,这些内容在本电子教案中并未讲解而是要求同学自己阅读教材。 * 9.4.1 RPC基本操作 RPC(Remote Process Call,远程过程调用)为一个进程提供了访问其它进程服务的能力,这些进程往往处于不同的计算机。 RPC是一种客户机/服务器形式的服务,一个客户机进程可以执行另一台计算机上的进程,向这个进程提供数据,获取这个进程运行的结果等等。 * 9.4.1 RPC基本操作 RPC基本操作的结构 * 9.4.1 RPC基本操作 客户应用向客户桩程序(stub)发出常规的函数调用,客户桩程序接受有关参数或返回有关参数; 参数可以是输入参数、输出参数、或既是输入参数又是输出参数。 客户桩程序把输入参数的数据转换成一种标准的公共数据表达形式,组成一个包含该输入参数的数据块,调用客户运行时(runtime)程序,这些运行时程序往往以函数库形式供使用; 客户运行时程序把有关数据块发送给服务器端的运行时程序; 服务器运行时程序向服务器桩程序发出一个调用,传递有关参数,服务器桩程序则把有关参数转换成本地的数据表达形式,最后桩程序向服务器应用发出调用,随后,服务器就可以按照有关约定来处理接收到的信息。 * 当服务器处理完成后,它向调用方返回有关出口结果数,整个过程和调用过程相反,即服务器?服务器桩程序?服务器运行时程序?客户运行时程序?客户桩程序?客户应用程序。 9.4.1 RPC基本操作 * 9.4.2 RPC实例 当前两个最常用的RPC系统是ONC(开放网络计算)/RPC和DCE(分布式计算环境)/RPC。 ONC/RPC 支持的运输协议是TCP和UDP ,信息传递的可靠性由下层协议保证 使用XDR协议来实现异种计算机之间的数据传输,用单一的格式来传递数据 安全性(称为安全RPC)通过NIS+来实现,NIS+提供授权和鉴别功能 使用NIS+来处理全局名字服务 * DCE/RPC 支持运输协议TCP、UDP和DECNET ,本身保证了信息的传递,并且与具体的运输协议无关 使用NDR来实现异种计算机之间的数据传输,总共有16种格式 DCE/RPC提供鉴别、授权、访问控制服务,客户机和服务器都能被鉴别 使用一种基于X.500目录服务(XDS)的全局目录服务(GDS),使用GDS可以提供服务全球资源的功能 9.4.2 RPC实例 * 下面这段代码给出了一个方法,当不使用RPC时,如何获得远程计算机时间。 int remote_time(char *machine, char *time_buf) { struct sockaddr_in serv_addr; int sockfd; int nread; if (sockfd = socket(AF_INET, SOCK_STREAM, 0)) 0) return 1; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(machine); serv_addr.sin_port = htons(13); if (connect(sockfd, serv_addr, sizeof(serv_addr)) 0) return 2; nread = read(sockfd, time_buf, sizeof(time_buf)); time_buf[nread] = \0; close(sockfd); return 0; } 9.4.2 RPC实例 * 如果使用RPC调用,则和本地时间调用相似,所有网络调用由RPC完成,客户机只要简单地调用remote_time(machine, time_buf)即可,而在远程计算机上时间调用的实现如下:
文档评论(0)