10.插口API技术(zlp2012)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第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、面向连接的应用程序流程图

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功