- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六讲 客户程序举例 电子科技大学计算机学院 客户软件例子 通过举例子说明上章的概念、算法。 例子的特点: 服务本身所需要的代码很少,易理解 突出基本算法 说明客户/服务器如何使用系统调用 代码长短和服务数量的关系 模块化,过程化 隐藏细节:将复杂的程序分解成一组过程,模块化的程序 网络软件含有很多细节,隐藏细节减少出错机会 重用代码 将依赖操作系统的代码隔离,便于移植 针对客户程序的过程库例子 每个客户与服务器建立联系必须: 选择协议(UDP或TCP) 查找服务器的机器名 查找所期望的服务并将其映射到协议端口号 分配套接字并与之连接 将这个过程设计为过程库的一部分,只需一次编码。 socket = connectTCP(machine, service); socket = connectUDP(machine, service); 正确抽象:高级操作,共享代码,减少出错 实现connectTCP和connectUDP 将所有的底层操作放置到connectsock中 实现connectTCP和connectUDP成为简单调用 实现connectTCP和connectUDP 构成连接的过程 connectsock:含有所有需要用来分配套接字和连接该套接字的代码,p58 #include 语句 宏定义和变量定义,函数声明,功能说明 函数名称和参数说明 局部变量定义 取得端口号,IP地址,和使用协议号 使用socket得到套接字 使用connect建立连接 返回套接字 connectsock说明 复杂条件表达式:函数调用,赋值,比较在一行 memset和memcpy的使用特点 辅助的系统调用:gethostbyname, getprotobyname, getservbyname. errexit: 出错退出 int errexit (const char * format, …) { va_list args; va_start(args, format); vfprintf(stderr, format, args); va_end(args); exit(1); } DAYTIME服务 允许用户获得当前的日期和时间 客户程序访问服务器获得信息 格式:weekday,month,day,year,time-timezone 例子:Thursday,February 22,1996 17:3743-PST 可以使用TCP也可以使用UDP实现,协议端口13 DAYTIME服务 可以使用TCP也可以使用UDP实现 对于TCP版本 只要连接到来,服务器就构造包含当前日期时间的文本字符串发送,然后关闭连接。客户不用发送任何数据,发送了也会忽略。 针对DAYTIME的TCP客户实现 TCPdaytime.c 的实现说明。P61 #include语句 变量、恒量和函数定义 客户程序主函数main,含参数 int main(int argc, char *argv[]) 对参数的个数进行判断,根据参数数量的不同进行不同的参数处理 如果出错,提示使用方法,退出 调用TCPdaytime( )获得服务器服务 使用connectTCP得到套接字 循环等待服务器的响应,并送到标准文件显示 从TCP连接中进行读 TCP提供流式服务,不保持记录边界 发送应用程序和接收应用程序分开了 发送2个64字节,可能接收1次或者3次完成 一次TCP连接的读操作调用返回的字节数依赖于下层互联网络数据报的大小,可用的缓存空间,以及穿越网络所遇到的时延。 必须要重复地调用recv(或者read),直到获得所有的数据 TCP的流服务不能保证按写入时相同的数据块交付数据 TIME服务 允许一台机器从另外一台机器获得日期和时间。 由于存在不同的时区,所有的时间日期信息必须用国际标准时间:UCT或UT 服务器应答前将本地时间转化为标准时间 客户收到应答时,将国际标准时间转化为本地时间。 TIME协议规定由32bit的整数来表示 从1990年1月1日午夜为起点的秒数 用于一台计算机使用另外一系统时钟来设置起事件 访问TIME服务 TIME服务使用端口37 可以使用TCP协议 使用TCP的TIME服务器利用连接的出现激活输出,类似DAYTIME服务。 使用TCP的客户不用发送任何数据 也可以使用UDP访问TIME服务 客户发出包含单个数据报的请求 服务器从传入的数据报中取出地址和端口号 服务器将当前时间编码为一个整数,使用上述地址和端口号发回给客户 精确时间和网络时延 由于网络时延,客户收到的时间慢了 尽管有更加复杂的协议来处理时钟同步 TIME协议因为简单,在局域环境中,在某些环境下,还是使用很多。 改进TIME协议提高精确性 计算服务器到客户的
您可能关注的文档
最近下载
- 人力资源管理课后答案德斯勒.docx
- 马克思主义新闻观十二讲之第九讲实现新闻传播权利与社会责任的统一.docx VIP
- 国际航运管理 全套课件.PPT VIP
- 财务共享服务教学课件4第四章 费用报销流程.pptx VIP
- 手术患者意外伤害预防.pptx VIP
- 2025年新人教版数学7年级上册整册同步教学课件.pptx
- 广告理论与实务:各类广告媒介PPT教学课件.pptx VIP
- 第1课 课题一《课外生活小调查·周末生活我采访》(教学设计)-2024-2025学年三年级上册综合实践活动浙教版.docx VIP
- 广告理论与实务:印刷媒体广告PPT教学课件.pptx VIP
- 铭记历史·开创未来--2025-2026学年高一上学期纪念抗日战争胜利80周年爱国主义教育主题班会.pptx VIP
文档评论(0)