UDP程序设计.pptVIP

  • 13
  • 0
  • 约6.28千字
  • 约 25页
  • 2017-12-04 发布于江西
  • 举报
UDP程序设计

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)

1亿VIP精品文档

相关文档