嵌入式开发课件-第9章.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文档。上传文档
查看更多
9.1 UDP网络程序设计模型 9.1.1 UDP程序工作流程 根据前面介绍的知识我们知道,TCP协议是基于数据流形式进行数据传输的,而UDP协议是基于数据报模式进行数据传输的。它的通信双方是不需要建立连接的,对于一些速度要求较高可靠性要求不高的网络应用程序来说,数据报通信是一个非常好的选择 。 数据报是网络层数据单元在介质上传输信息的一种逻辑分组格式,它是一种在网络中传播的、独立的、自身包含地址和端口号信息的消息,它能否到达目的地、到达的时间、到达时内容是否会变化不能准确地知道。 无连接的数据报(SOCK_DGRAM)传输服务在传输层使用UDP协议,与面向连接的通信过程不同,它的最大特点是不需要在客户和服务器之间先建立连接。通信的任何一方可以先发送数据,这样首先发送数据的一方就成了客户端,而接收数据的一方就是服务器端。在数据传输完成后,只要关闭套接口释放网络资源,通信过程就结束了。 9.1 UDP网络程序设计模型 9.1.1 UDP程序工作流程 无连接的数据报传输服务通信时,客户端与服务器端所使用的函数是类似的。其工作流程如下: ? 第一步:使用WSAStartup()函数检查系统协议栈的安装情况。常用格式为: WSAStartup(0x0202,wsaData); WSAStartup(MAKEWORD(2,2),wsaData); ? 第二步:使用socket()或WSASocket()函数创建套接口,以确定了相关五元组的协议。常用格式有如下几种: 9.1 UDP网络程序设计模型 9.1.1 UDP程序工作流程 SOCKET s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); SOCKET s=socket(AF_INET,SOCK_DGRAM,0); SOCKET s=WSASocket(AF_INET,SOCK_DGRAM,IPPROTO_TCP,NULL,0,WSA_FLAG_OVERLAPPED); SOCKET s=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED); 9.1 UDP网络程序设计模型 9.1.1 UDP程序工作流程 ? 第三步:使用bind()函数将创建的套接口与本地地址绑定。它确定了相关五元组中的本地IP地址和端口号。 常用格式:bind(s,(const struct sockaddr*)localaddr,sizeof(sockaddr)); ? 第四步:使用sendto()或WSASendTo()函数发送数据,也可使用recvfrom()或WSARecvFrom()函数接收数据。 ? 第五步:使用closesocket()函数关闭套接口。 ? 第六步:最后调用WSACleanup()函数,结束Windows Sockets API的使用。 至此,一次无连接的数据报传输过程结束。 9.1 UDP网络程序设计模型 9.1.2 程序框架 无连接的客户与服务器之间的交互通信模型可以图9-1表示。 9.1 UDP网络程序设计模型 9.1.2 程序框架 图9-1所示的通信模型也明确的表示出了无连接的客户机/服务器程序框架,图中在进行数据交换时,双方均可以发送数据和接收数据。 在具体编写无连接的客户机/服务器程序时,应该注意以下几个问题: ? 通信的一方可以不用bind()绑定IP地址和端口,而由系统自动分配,但要注意不绑定IP地址和端口的一方必须首先向绑定地址的一方发送数据。 ? 无连接应用程序也可以调用connect()函数,但是它并不向对方发出建立连接的请求,内核只是将connect()中指定的目标端IP地址和端口号记录下来,在以后的通信中就可以使用面向连接的数据发送send()和数据接收revc()函数。 9.1 UDP网络程序设计模型 9.1.2 程序框架 ? 无连接的数据报传输过程中,做为服务器的一方必须要先启动,否则客户请求传不到服务进程。 ? 由于无连接的客户端一般不调用connect(),因此在数据发送之前,客户与服务器之间尚未建立一个全相关(五元组),但各自通过socket()和bind()调用建立了半相关。发送数据时,发送方除指定本地套接口的地址外,还需指定接收方套接口的地址,从而在数据收发过程中动态地建立了全相关。 9.2 UDP实例程序1 实例程序说明 本实例程序使用的编程环境为Visual C++6.0,使用的是控制台程序“Win32 Console Application”。通信协议使用无连接的UDP协议(SOCK_DGRAM)。服务器端IP地址由系统指定,端口号在程序中指定为5050,用符号常量定义。 编该实例中我们编写一个基于数据报的客户机/服务器交互程

文档评论(0)

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

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

1亿VIP精品文档

相关文档