第6讲数据报套接字编程.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单次交互客户请求的并发处理 服务器 客户端 端口69 子线程 客户端 子线程 多次交互客户请求的并发处理 服务器如何区分来自客户的第一个请求和后续请求? 客户端如何获知服务器的后续响应? 服务器在新的套接口上绑定临时端口 将服务器第一个应答中的源端口号作为后续目的端口 多次交互客户请求的并发处理 服务器 客户端 端口69 子线程 客户端 子线程 端口2132 端口2133 端口2132 思考 怎样处理ICMP协议消息? * 2)掌握数据报套接字编程中涉及的基本函数的使用方法; 4)UDP协议提供的是无连接的、不可靠的传输服务,如何在应用程序中解决UDP的不可靠性是要掌握的内容; * 上一讲我们分析过,由于TCP协议使用3次握手建立连接,并且在关闭连接时要进行4次交互,从而造成传销开销大的问题;并且由于服务器要为每一个已经建立连接的客户分配单独使用的资源,从而可能造成服务器资源过耗的问题;所以,一般只在传输的数据量大,且可靠性要求高的应用中,才使用TCP协议通信; 而在传输的数据量不大,并且对可靠性要求不高的应用中,尽可能使用UDP协议; 下一讲我们就来讨论使用UDP协议通信的网络应用程序如何设计,即基于数据报套接字的网络编程方法; * 与TCP协议相比,UDP协议的优点是可以提供更大的灵活性 它可以提供多对多通信:多个应用程序可以向一个接收方法送UDP报文,同时一个发送方也可以向多个接收方发送数据;更重要的是,UDP协议能让应用程序使用底层网络的广播或组播设施交付报文; 缺点是提供的是不可靠的传输服务:即报文可能丢失、重复或失序;它没有提供重传机制,也没有提供差错控制、流量控制等机制,所以如果发生故障,也不会通知发送方; 本讲的主要内容就算探讨数据报套接字的灵活性的体现以及如何克服其传输不可靠性的; 根据UDP协议的特点,推荐在下列情况下,才使用数据报套接字设计网络程序: 在本身就比较可靠的本地环境中运行的网络程序,由于不需要额外的可靠性处理,使用数据报套接字是比较好的选择; 另外,对于广播或多播应用程序,不能使用TCP来通信,而只能使用UDP来通信,所以此时,必须使用数据报套接字编程; 相反,在下列情况下不建议使用数据报套接字: 在不可靠的广域网环境中运行的应用程序,如果设计者偏要用数据报套接字实现时,一定要在应用程序中添加检查错误的功能,例如报文的确认、超时和重传等功能; 另外,就是当应用程序要传输海量数据时,最好也不要使用数据报套接字; * 过程:服务器进程和客户端进程在通信前必须创建各自的套接字,然后对相应的套接字进行“读”、“写”操作,实现数据的传输。 [板书] 用我与朋友联系祝福生日的例子来描述,整个过程中需要确定(四要素) ◎通讯方式:写信(不是打电话、发电报等) ◎标识:双发的通信地址和姓名 ◎内容:信封里的内容,例如“圣诞快乐!” ◎过程:寄信、收信 同样,客户-服务器之间的数据套接字通信过程中也可以找到与以上过程相似的关键点: ◎通讯方式: udp协议 ◎标识:(源IP,源端口)(目标IP,目标端口) ◎内容:udp包中的数据 ◎过程: 发送数据、接收数据 因此,数据报套接字通信的过程如下: 1)创建套接字,指定使用UDP协议(不可靠的传输服务)进行通信——确定通信方式; 2)为该套接字指定本地和远程的IP地址和通信端口——确定通信双方的标识; 3)创建好套接字后,就可以进行数据传输了; 4)通信结束时,要关闭相应的套接字; 该过程与流式套接字的通信过程之间的区别:在进行数据传输前,不需要将通信双方的套接字建立连接; * 数据报套接字的客户-服务器交互的具体过程与流式套接字的客户-服务器交互过程基本相似,只是有一些细节的处理不太一样: 首先,仍然是服务器进程要先启动; 服务器: 1)调用socket():创建一个数据报套接字; 2)调用bind():将该套接字绑定到本地的熟知的端口上; 3)调用recvfrom():等待客户的数据报到来,如果没有接收到客户的数据报,则recvfrom函数将一直处于阻塞状态; 客户端: 1)调用socket():创建一个数据报套接字; 2)调用sendto():发送数据,这个数据报将直接作为服务请求发送到服务器端; 服务器收到客户的服务请求后: 4)处理该请求报文; 5)调用sendto():将应答报文发回给服务的请求者; 客户端在发送服务请求报文后: 3)调用recvfrom():接收来自服务器的应答报文; 如果客户进程还有数据没有发送完,则继续调用sendto函数发送请求数据,并调用recvfrom函数接收服务器的应答; 4)当客户通信完毕后,调用closesocket()关闭套接字; 服务器在终止服务时,也要调用closesocket()关闭套接字; 与

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档