《插口API技术zl》PPT课件.ppt_第1页
《插口API技术zl》PPT课件.ppt_第2页
《插口API技术zl》PPT课件.ppt_第3页
《插口API技术zl》PPT课件.ppt_第4页
《插口API技术zl》PPT课件.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第4 4篇篇 计算机网络应用程序设计计算机网络应用程序设计 随着网络的快速发展和日益普及,越来越多的应用转移到网随着网络的快速发展和日益普及,越来越多的应用转移到网 络平台上络平台上( (WebWeb主页、网上办公、电子邮件、网上聊天、主页、网上办公、电子邮件、网上聊天、BBSBBS等等) )。开发开发 的关键就是的关键就是针对应用网络而进行的针对应用网络而进行的通信程序设计通信程序设计 网络程序的设计就在于如何实现网络应用进程间的信息交互网络程序的设计就在于如何实现网络应用进程间的信息交互 一般说来,一般说来,应用进程间的通信可以分为两种:应用进程间的通信可以分为两种: 1 1、同系统同系统中中不同不同应用应用进程间的通信进程间的通信; 2 2、不同系统不同系统中应用中应用进程间的通信进程间的通信; 本篇主要讨论本篇主要讨论不同系统不同系统中进程间通信的中进程间通信的SocketSocket技术技术 。TCP/IP协议是在物理网上的一组完整的网络协议集 。TCP是提供传输层服务,而IP则是提供网络层服务 n n TCP/IPTCP/IP体系结构与特点体系结构与特点 应用层 传输层 网络层 网络接口层 TCP/IP包括的协议 1 1、TCP/IPTCP/IP体系结构体系结构 TCP/IP协议核心与应用程序关系图 。协议核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口 层三层,这三层是在操作系统内核中实现,用户一般不涉及 。用户使用(编程)时的两种介面形式 由内核心直接提供的系统调用(核内实现) 使用以库函数方式提供的各种 函数调用(核外实现) 所以说用户在编程时,用户服务需通 过核外应用程序才能实现,故需使用 套接字(Socket)来实现 2 2、TCP/IPTCP/IP特点特点 Windows Sockets是一套开放的、支 持多多协议下的网络编程接口 它基本上实现与协议无关,开发者可 使用Winsock来调用多种协议的功能 (常用的是TCP/IP协议) 一、什么是套接字(Socket) SocketSocket是建立在传输层协议(主要是TCP和UDP)上的一种套接字规 范,它定义两台计算机间进行通信的规范(也是一种编程规范) SocketSocket是一种识别码是一种识别码,应用程序可用此码来唯一识别通信端点,应用程序可用此码来唯一识别通信端点 SocketSocket是可被命名、被寻址的通信端点,使用中的每一个套接字 都有其类型和一个与之相连接进程 SocketSocket存在于通信区域中(通信区域又称地址簇),只与同一区域 中的套接字进行数据交换(跨区域时,需执行某种转换进程才能实现) 每每台机器上都有一个台机器上都有一个SocketSocket,程序员可通过信道在两台机器之间,程序员可通过信道在两台机器之间 发送数据发送数据 也即:如两台计算机是利用一个通道进行通信,则这个通道的两 端就是两个套接字 二、套接字二、套接字(Socket)(Socket)的作用的作用 也即:使让程序员不必了解计算机之间相互通信的底层知识也即:使让程序员不必了解计算机之间相互通信的底层知识 套接字屏蔽了底层通信软件和具体操作系统的差异,使得 任何两台安装了TCP协议软件和实现了套接字规范的计算机之 间的通信成为可能 目前目前 WINDOWS SOCKET 支持两种套接字类型 流套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM) 基本套接口应用基本套接口应用 1、UDP无连接的、不可靠的数据报协议 【应用】:DNS, NFS, SNMP, ICQ 2、TCP 面向连接的、可靠的字节流协议 【应用】:www, telnet ,ftp qq SocketSocket大致位于会话层大致位于会话层,会话,会话 层在两台计算机之间为管理和层在两台计算机之间为管理和 控制数据流提供服务控制数据流提供服务 qq 程序员在使用程序员在使用SocketSocket编写代码编写代码 时,时,代码工作在表示层代码工作在表示层。表示。表示 层提供一个能让应用层使用的层提供一个能让应用层使用的 公共信息,而应用层并不需要公共信息,而应用层并不需要 知道知道socketsocket如何工作如何工作 二、Socket存在于什么地方? 第第1010章章 应用程序编程接口应用程序编程接口APIAPI 在在TCP/IPTCP/IP中,中,TCPTCP和和UDPUDP都使用端口为上层都使用端口为上层应用进程应用进程提供通信服提供通信服 务务( (应用进程须通过相应应用进程须通过相应( (1616位标识位标识) )端口与传输层实体进行交互端口与传输层实体进行交互) ) 一个进程为了连接,需指定对方端口号一个进程为了连接,需指定对方端口号和和IPIP地址。于是把这个地址。于是把这个 二元组二元组(IP(IP地址、端口号地址、端口号) )称为一个称为一个接口接口(Socket-(Socket-套接口套接口) ) 进程通信时,需涉及各层协议的实现细节,进程通信时,需涉及各层协议的实现细节,为简化应用程序设为简化应用程序设 计,开发了一种称为计,开发了一种称为接口接口(Socket)(Socket)的逻辑文件,这样的逻辑文件,这样使进程对使进程对 通信信道的操作就像对文件一样简单通信信道的操作就像对文件一样简单 SocketSocket就是网络编程就是网络编程APIAPI,即网络应用程序的编程接口,即网络应用程序的编程接口 当系统把一个当系统把一个SocketSocket分配给一个进程时,就是将一个进程连接分配给一个进程时,就是将一个进程连接 到一个信道的端点上,双方就可进行连接和通信到一个信道的端点上,双方就可进行连接和通信 10.110.1 基本概念基本概念 接口层接口层 客户进层 服务器进层 接口通信接口通信 模型模型 网 络 1 1、接口接口API(ApplicationAPI(Application Programming Interface_ Programming Interface_应用编程接口应用编程接口) ) 。接口。接口APIAPI是是一组调用一组调用操作系统操作系统或或其他程序其他程序而获得访问服务的接口而获得访问服务的接口 函数。这些函数屏蔽了协议的实现细节函数。这些函数屏蔽了协议的实现细节, ,使应用程序变得简单使应用程序变得简单 。一条连接需用一对接口标识。一条连接需用一对接口标识。这对接口组成一个。这对接口组成一个四元组四元组: ( (本地本地IPIP地址、本地端口号、远程地址、本地端口号、远程IPIP地址、远程端口号地址、远程端口号) ) 。对于整个对于整个InternetInternet来说,在传输层通信的来说,在传输层通信的一对接口必须是唯一一对接口必须是唯一 的的, , 这样才能区分开同时通信的多个主机中的多个进程这样才能区分开同时通信的多个主机中的多个进程 10.210.2 基本接口函数基本接口函数 接口接口APIAPI的实现,就是调用的实现,就是调用socketsocket函数实现一些功能。函数实现一些功能。 下面介绍几个基本的下面介绍几个基本的socketsocket调用。调用。 1 1、创建创建socket-socket-服务绑定:服务绑定:socket()socket() 在应用程序中使用接口在应用程序中使用接口APIAPI时,先要创建一个接口,应用程时,先要创建一个接口,应用程 序调用序调用socketsocket()()函数创建一个接口函数创建一个接口 功能:功能:就是创建一个通信指定提供什么服务就是创建一个通信指定提供什么服务( (绑定了什么服务绑定了什么服务) ),接上什么,接上什么 设备,就是就是绑定了什么服务,设备,就是就是绑定了什么服务,原型如下 参数说明:参数说明: 。familyfamily 用来指定接口使用的协议族用来指定接口使用的协议族 。Type Type 表示接口要使用的通信类型表示接口要使用的通信类型 。protocolprotocol 表示接口所使用的特定传输协议表示接口所使用的特定传输协议 接口创建后为了进行通信,需将接口创建后为了进行通信,需将socketsocket绑定在某一地址上绑定在某一地址上 ( (本地地址本地地址/ /远程地址远程地址) ) 功能:功能:调用函数调用函数bindbind(),(),可以将本地地址与接口绑定在一起可以将本地地址与接口绑定在一起 原型如下:原型如下: 参数说明参数说明 。sockfdsockfd 函数函数socketsocket返回的接口描述字返回的接口描述字 。myaddrmyaddr 是特定于协议的地址结构体的指针,指向本地接口地址是特定于协议的地址结构体的指针,指向本地接口地址 。addrlenaddrlen 是接口地址结构体的长度是接口地址结构体的长度 2 2、本地地址绑定:、本地地址绑定:bindbind()() 3 3、建立接口连接、建立接口连接-绑定远端服务器地址:绑定远端服务器地址:connect()connect() 功能功能: :函数函数connect()connect()可以让客户机程序建立一个与可以让客户机程序建立一个与TCPTCP服务器的连接服务器的连接 原型如下: 参数说明 。sockfd 是函数socket返回的接口描述符; 。servaddr 指定远程服务器的接口地址; 。Addrlen 是接口地址结构体的长度 4 4、接口被动转换、接口被动转换: :listen( )listen( )_ _两个功能两个功能 1 1)主动接口的被动转换)主动接口的被动转换 因因socket( )socket( )创建的接口都是主动插口,只可用来进行主动连接创建的接口都是主动插口,只可用来进行主动连接( (发出发出 请求请求)调用调用connect( )connect( ),不能接收连接请求不能接收连接请求 利用利用listen( )listen( )函数将未连接的主动接口转换为被动接口函数将未连接的主动接口转换为被动接口( (即倾听接口即倾听接口) ), 作用是告诉操作系统该接口可以接收连接请求。故作用是告诉操作系统该接口可以接收连接请求。故listen( )listen( )也称创建也称创建 倾听接口函数倾听接口函数 2 2)设置最大请求连接数)设置最大请求连接数 如一个客户机的如一个客户机的同步数据段同步数据段SYNSYN到达时到达时( (TCPTCP用这种数据段向对方用这种数据段向对方TCPTCP 协议请求建立连接协议请求建立连接) ),倾听接口队列已满,倾听接口队列已满,TCPTCP则忽略这个则忽略这个SYNSYN数据段数据段 。sockfdsockfd:为为要转换的已绑定本地地址的接口描述符;要转换的已绑定本地地址的接口描述符; 。backlogbacklog:设置请求队列的最大长度,表示被动(倾听)接口能够接设置请求队列的最大长度,表示被动(倾听)接口能够接 收的最大数目的未接收连接收的最大数目的未接收连接( (相当于窗口通告相当于窗口通告) ) 5 5、从被动接口的完成队列中接收一个连接请求、从被动接口的完成队列中接收一个连接请求:accept( ):accept( ) 功功 能:能: 一个接口被创建、用一个接口被创建、用bindbind绑定本地地址并转换成被动模式后,接绑定本地地址并转换成被动模式后,接 收到连接请求后,服务器就能使用该连接与客户机进行通信收到连接请求后,服务器就能使用该连接与客户机进行通信 面向连接传输协议的服务器调用面向连接传输协议的服务器调用 acceptaccept从被动从被动( (倾听倾听) )接口的完接口的完 成连接队列中接收下一个连接请求,成连接队列中接收下一个连接请求,原型如下: 参数说明参数说明: 。SockfdSockfd:为服务器已经创建并绑定到指定接口地址的插口描述符为服务器已经创建并绑定到指定接口地址的插口描述符 。AddrAddr: 是指向一个是指向一个InternetInternet接口地址结构体的指针接口地址结构体的指针 。dddrlendddrlen:是是指向一个整型数的指针指向一个整型数的指针 6、基本接口I/O函数 1 1)I/OI/O函数说明函数说明 I/O函数read()和 write(),原型如下: 2 2)从)从socketsocket发送消息到另一个发送消息到另一个socketsocket 函数函数sendsend和和sendtosendto用来从用来从socketsocket发送消息,发送消息,原型如下: #include #include ssize_tssize_t send( send( intint sockfdsockfd, const void * buff, size_t , const void * buff, size_t nbytesnbytes, , intint flags); flags); ssize_tssize_t sendtosendto( ( intint sockfdsockfd, const void * , const void * msgmsg, size_t , size_t nbytesnbytes , , intint flags, const flags, const structstruct sockaddrsockaddr * to,size_t * to,size_t tolentolen ) ); 返回:发送字节数返回:发送字节数-成功,成功,-1-1-失败失败 3 3)从)从socketsocket接收消息接收消息 函数函数recvrecv和和recvfromrecvfrom用来从用来从socketsocket接收消息接收消息 ,原型如下: #include #include ssize_tssize_t recv(intrecv(int sockfdsockfd, void * , void * bufbuf, size_t , size_t lenlen, , intint flags); flags); ssize_tssize_t recvfrom(intrecvfrom(int sockfdsockfd, void * , void * bufbuf, size_t , size_t lenlen, , intint flags, flags, structstruct sockaddrsockaddr * from, size_t * from, size_t fromlenfromlen ); ); 返回:接收字节数返回:接收字节数-成功,成功,-1-1-失败失败 4 4)用报文构造体收发数据)用报文构造体收发数据 函数函数recvmsgrecvmsg()()和和sendmsgsendmsg()()是是构造从构造从/ /往指定的地址收往指定的地址收/ /发数据发数据 原型如下:原型如下: 7 7、关闭接口通道与撤消接口、关闭接口通道与撤消接口 由于由于TCPTCP连接是全双工的,对每一接口来说,都可以看作在使用连接是全双工的,对每一接口来说,都可以看作在使用 读、写两个通道进行通信。故关闭一个接口通信可以有读、写两个通道进行通信。故关闭一个接口通信可以有两种不同级别两种不同级别 的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论