您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 10.插口API技术
第4篇计算机网络应用程序设计—随着网络的快速发展和日益普及,越来越多的应用转移到网络平台上(Web主页、网上办公、电子邮件、网上聊天、BBS等)。开发的关键就是针对应用网络而进行的通信程序设计—网络程序的设计就在于如何实现网络应用进程间的信息交互—一般说来,应用进程间的通信可以分为两种:1、同系统中不同应用进程间的通信;2、不同系统中应用进程间的通信;——本篇主要讨论不同系统中进程间通信的Socket技术。TCP/IP协议是在物理网上的一组完整的网络协议集。TCP是提供传输层服务,而IP则是提供网络层服务TCP/IP体系结构与特点应用层传输层网络层网络接口层TCP/IP包括的协议1、TCP/IP体系结构TCP/IP协议核心与应用程序关系图。协议核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层三层,这三层是在操作系统内核中实现,用户一般不涉及。用户使用(编程)时的两种介面形式⊕由内核心直接提供的系统调用(核内实现)⊕使用以库函数方式提供的各种函数调用(核外实现)—所以说用户在编程时,用户服务需通过核外应用程序才能实现,故需使用套接字(Socket)来实现2、TCP/IP特点★WindowsSockets是一套开放的、支持多多协议下的网络编程接口★它基本上实现与协议无关,开发者可使用Winsock来调用多种协议的功能(常用的是TCP/IP协议)一、什么是套接字(Socket)Socket是建立在传输层协议(主要是TCP和UDP)上的一种套接字规范,它定义两台计算机间进行通信的规范(也是一种编程规范)Socket是一种识别码,应用程序可用此码来唯一识别通信端点Socket是可被命名、被寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连接进程Socket存在于通信区域中(通信区域又称地址簇),只与同一区域中的套接字进行数据交换(跨区域时,需执行某种转换进程才能实现)每台机器上都有一个Socket,程序员可通过信道在两台机器之间发送数据也即:如两台计算机是利用一个通道进行通信,则这个通道的两端就是两个套接字二、套接字(Socket)的作用—也即:使让程序员不必了解计算机之间相互通信的底层知识—套接字屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了套接字规范的计算机之间的通信成为可能★目前WINDOWSSOCKET支持两种套接字类型—流套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)基本套接口应用1、UDP-无连接的、不可靠的数据报协议【应用】:DNS,NFS,SNMP,ICQ2、TCP-面向连接的、可靠的字节流协议【应用】:Socket大致位于会话层,会话层在两台计算机之间为管理和控制数据流提供服务程序员在使用Socket编写代码时,代码工作在表示层。表示层提供一个能让应用层使用的公共信息,而应用层并不需要知道socket如何工作二、Socket存在于什么地方?第10章应用程序编程接口API在TCP/IP中,TCP和UDP都使用端口为上层应用进程提供通信服务(应用进程须通过相应(16位标识)端口与传输层实体进行交互)一个进程为了连接,需指定对方端口号和IP地址。于是把这个二元组(IP地址、端口号)称为一个接口(Socket-套接口)进程通信时,需涉及各层协议的实现细节,为简化应用程序设计,开发了一种称为接口(Socket)的逻辑文件,这样使进程对通信信道的操作就像对文件一样简单Socket就是网络编程API,即网络应用程序的编程接口当系统把一个Socket分配给一个进程时,就是将一个进程连接到一个信道的端点上,双方就可进行连接和通信10.1基本概念接口层接口层客户进层服务器进层接口通信模型网络1、接口API(ApplicationProgrammingInterface_应用编程接口)。接口API是一组调用操作系统或其他程序而获得访问服务的接口函数。这些函数屏蔽了协议的实现细节,使应用程序变得简单。一条连接需用一对接口标识。这对接口组成一个四元组:(本地IP地址、本地端口号、远程IP地址、远程端口号)。对于整个Internet来说,在传输层通信的一对接口必须是唯一的,这样才能区分开同时通信的多个主机中的多个进程10.2基本接口函数—接口API的实现,就是调用socket函数实现一些功能。下面介绍几个基本的socket调用。1、创建socket--服务绑定:socket()—在应用程序中使用接口API时,先要创建一个接口,应用程序调用socket()函数创建一个接口功能:就是创建一个通信指定提供什么服务(绑定了什么服务),接上什么设备,就是就是绑定了什么服务,原型如下参数说明:。family—用来指定接口使用的协议族。Type—表示接口要使用的通信类型。protocol—表示接口所使用的特定传输协议——接口创建后为了进行通信,需将socket绑定在某一地址上(本地地址/远程地址)功能:调用函数bind(),可以将本地地址与接口绑定在一起原型如下:参数说明。sockfd—函数socket返回的接口描述字。myaddr—是特定于协议的地址结构体的指针,指向本地接口地址。addrlen—是接口地址结构体的长度2、本地地址绑定:bind()3、建立接口连接--绑定远端服务器地址:connect()功能:函数connect()可以让客户机程序建立一个与TCP服务器的连接原型如下:参数说明。sockfd—是函数socket返回的接口描述符;。servaddr—指定远程服务器的接口地址;。Addrlen—是接口地址结构体的长度4、接口被动转换:listen()_两个功能1)主动接口的被动转换★因socket()创建的接口都是主动插口,只可用来进行主动连接(发出请求){调用connect()},不能接收连接请求★利用listen()函数将未连接的主动接口转换为被动接口(即倾听接口),作用是告诉操作系统该接口可以接收连接请求。故listen()也称创建倾听接口函数2)设置最大请求连接数—如一个客户机的同步数据段SYN到达时(TCP用这种数据段向对方TCP协议请求建立连接),倾听接口队列已满,TCP则忽略这个SYN数据段。sockfd:为要转换的已绑定本地地址的接口描述符;。backlog:设置请求队列的最大长度,表示被动(倾听)接口能够接收的最大数目的未接收连接(相当于窗口通告)5、从被动接口的完成队列中接收一个连接请求:accept()功能:一个接口被创建、用bind绑定本地地址并转换成被动模式后,接收到连接请求后,服务器就能使用该连接与客户机进行通信—面向连接传输协议的服务器调用accept从被动(倾听)接口的完成连接队列中接收下一个连接请求,原型如下:参数说明:。Sockfd:为服务器已经创建并绑定到指定接口地址的插口描述符。Addr:是指向一个Internet接口地址结构体的指针。dddrlen:是指向一个整型数的指针6、基本接口I/O函数1)I/O函数说明——I/O函数read()和write(),原型如下:2)从socket发送消息到另一个socket——函数send和sendto用来从socket发送消息,原型如下:#includesys/socket.hssize_tsend(intsockfd,constvoid*buff,size_tnbytes,intflags);ssize_tsendto(intsockfd,constvoid*msg,size_tnbytes,intflags,conststructsockaddr*to,size_ttolen);返回:发送字节数--成功,-1--失败3)从socket接收消息——函数recv和recvfrom用来从socket接收消息,原型如下:#includesys/socket.hssize_trecv(intsockfd,void*buf,size_tlen,intflags);ssize_trecvfrom(intsockfd,void*buf,size_tlen,intflags,structsockaddr*from,size_tfromlen);返回:接收字节数--成功,-1--失败4)用报文构造体收发数据——函数recvmsg()和sendmsg()是构造从/往指定的地址收/发数据原型如下:7、关闭接口通道与撤消接口—由于TCP连接是全双工的,对每一接口来说,都可以看作在使用读、写两个通道进行通信。故关闭一个接口通信可以有两种不同级别的方法:单个关闭读/写通道、一同关闭读/写通道1)关闭接口通道(三种方式){单个关闭}。SHUT_RD━关闭连接的读通道;。SHUT_WR━关闭连接的写通道;。SHUT_RDWR━关闭连接的读写通道。2)撤消接口{同时关闭连接的读写通道}——上述两种方式分别用两个不同的函数shutdown()和close()实现shutdown()原型#includesys/socket.hintshutdown(intsockfd,inthowto);返回:0--成功,-1--出错Close()原型#includeunistd.hintclose(intsockfd);返回:0--成功,-1--出错典型过程图1、面向连接的套接字系统调用时序创建socket-服务绑定本地地址绑定接口被动转换连接请求连接请求从socket接收/发消息绑定远端服务器地址2、无连接协议的套接字调用时序3、面向连接的应用程序流程图
本文标题:10.插口API技术
链接地址:https://www.777doc.com/doc-4119086 .html