




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第章计算机网络应用程序设计,8.1 套接口API的有关概念 8.2 基本Socket函数 8.3 基于TCP的socket程序设计 8.4 基于UDP的socket 程序设计 8.5 输入输出多路复用 8.6 并发服务器程序设计,8.1 套接口API的有关概念,8.1.1 网络应用编程接口 Berkeley套接口API WinSock 远程过程调用(RPC),8.1.2 socket编程模型及类型 套接口可分如下5种类型:流式套接字、数据报套接字、原始套接字、SOCK_SEQPACKET及SOCK_RDM。 流式套接字定义了一种可靠的面向连接的服务,实现了无差错的数据传输。 数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠。 原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议实现的测试等。,Internet的Socket编程模型,8.1.3 socket地址应用进程的标识 Internet上两台主机种的进程间要进行通信,必须能够互相识别。用于标识进程的信息有两个: 主机名或主机地址 主机内部标识进程的标识符 这两部分合在一起,成为套接口地址(计算机通信的基础构筑块 ),8.1.4 通信进程的阻塞和非阻塞方式 对于运行状态中的进程来说,当某些条件不具备,如输入输出条件还没有准备好时,该进程可以有两种处理方式:阻塞与非阻塞。 阻塞方式 在阻塞方式下,当输入输出条件还没有准备好时,就将进程转入阻塞状态,标记阻塞原因,并保留当前进程现场信息,然后将控制转入进程调度程序,等阻塞原因解除后,将进程状态由阻塞变成就绪等待处理机,或直接获得由调度程序再次分配的处理机,恢复阻塞的现场继续执行。 非阻塞方式 在非阻塞方式下,当输入输出条件还没有准备好时,进程仍处于运行状态,通过循环,反复进行某条件的查询。一般说来,阻塞机制可以防止进程在循环反复的查询等待中造成资源浪费。但是有时在应用中需要进程一直处于运行状态,不希望进程在对socket的操作中阻塞,这时就要使用非阻塞机制。,8.2 基本Socket函数,8.2.1 初始化套接口服务绑定socket() 1、功能: 在应用程序中使用插口API时,首先要创建一个插口-socket。为了说明什么是socket,可以打个比方:一个电话插座,既可以接电话机打电话,也可以接传真机发传真,还可以接计算机上网。接上什么设备,就是绑定了什么服务。创建一个插口,就是创建一个通信,需要指定提供什么服务,即为一个标识符绑定某个服务,并为之分配资源。这个标识就是该插口标识。 应用程序调用socket()函数将创建一个插口。 2、原型,8.2.2 本地地址绑定bind() 1、功能 调用函数bind(),可以将本地地址与插口绑定在一起。调用成功时,返回0;否则,返回1,并设置全局变量errno为错误类型 2、原型,参数说明 sockfd是函数socket返回的插口描述字; myaddr是特定于协议的地址结构体的指针,指向本地插口地址; addrlen是插口地址结构体的长度。,8.2.3 建立套接口连接绑定远程服务器地址connect() 功能 函数connect()可以让客户机程序建立一个与TCP服务器的连接. 原型,参数: sockfd是函数socket返回的插口描述符; servaddr指定远程服务器的插口地址; addrlen是插口地址结构体的长度。,8.2.4 套接口被动转换listen() 函数listen()有两个功能。 (1)主动插口的被动转换 socket()创建的插口都是主动插口,只可以用来(调用connect())进行主动连接(发出请求),不能接收连接请求。listen()函数将未连接的主动插口转换为被动插口,即倾听插口(listening socket),告诉操作系统该插口可以接收连接请求。所以listen()也称为创建倾听插口函数。 (2)设置最大请求连接数 listen()用一个参数(backlog)指定完成队列的最大长度。如果一个客户机的SYN数据段到达时,倾听插口的完成队列已经满了,TCP则忽略这个SYN数据段。 listen()函数执行成功,返回0,服务器的TCP状态由CLOSED转变成LISTEN,成为被动模式;执行失败,返回1。 原型,参数: sockfd为要转换的已绑定本地地址的插口描述符; backlog设置请求队列的最大长度,表示被动(倾听)插口能够接收的最大数目的未接收连接(相当于窗口通告)。,8.2.4 套接口被动转换listen(),创建TCP服务器倾听插口的过程 (1)首先调用socket()函数创建一个主动插口; (2)调用bind()函数进行插口地址绑定; (3)调用listen()函数进行转换。,8.2.5 从被动套接口的完成队列中接受一个连接请求accept() 功能 一个插口被创建、用bind绑定本地地址并转换成被动模式后,必须接收一个连接请求。一旦接收了连接,服务器就能使用该连接与客户机进行通信。面向连接传输协议的服务器调用 accept从被动(倾听)插口的完成连接队列中接收下一个连接请求。如果该完成连接队列空,则使这个进程睡眠。 原型,参数: sockfd为服务器已经创建并绑定到指定插口地址的插口描述符; addr是指向一个Internet插口地址结构体的指针; addrlen是指向一个整型数的指针。,8.2.5 从被动套接口的完成队列中接受一个连接请求accept(),accept()工作过程 TCP使用侦听插口接收客户机的连接请求。如果调用accept()时,倾听插口的完成队列中有已经完成3次握手的TCP连接,accept()就从队列的首部读取第一个连接,并返回该连接的描述符。如果调用accept()时,倾听插口的完成队列为空,进程将阻塞,等待出现新的完成3次握手的TCP连接送到完成队列;TCP协议为服务器创建一个新的连接插口来标识这条新的连接,accept()返回该新连接的描述符。,8.2.6 基本套接口I/O函数列表,8.2.7 关闭插口通道与撤消套接口 1、概述 建立一对插口的连接之后,就可以进行通信了。由于TCP连接是全双工的,对每一个套接口来说,都可以看作在使用读、写两个通道进行通信。于是,关闭一个插口通信可以有两种不同级别的方法。 (1)关闭插口通道,具体有三种方式: SHUT_RD关闭连接的读通道; SHUT_WR关闭连接的写通道; SHUT_RDWR关闭连接的读写通道。 (2)撤消套接口(句柄),同时关闭了连接的读写通道。 这两种方式分别用两个不同的函数shutdown()和close()实现。 2. close()原型 函数close()用于撤消一个插口,终止其TCP连接,其原型为 #include in close (int sockfd) 3. shutdown()原型 #include int shutdown (int sockfd, int howto);,8.3 基于TCP的socket程序设计,8.3.1 TCP有限状态机 1、TCP有限状态机的概念 在网络通信中,一个健壮的插口应用程序必须能够处理通信过程中可能出现的各种状态。对于TCP来说,不同的状态将决定传输实体对一些事件的响应。描述TCP在响应各种事件时,各个宏观状态之间相互作用的规则称为TCP有限状态机(或称TCP状态转换图),它由图所示的11种状态组成。,TCP的有限状态机,2、状态转换分析 (1) 客户进程发起连接的状态转换过程 一个主机的客户进程要发起连接,其TCP实体就发一个SYN置1的分组 由CLOSED状态进入SYN_SENT状态。 收到来自进程的SYN和ACK,TCP就发出三次握手中的最后一个ACK 进入ESTABLISHED状态。这时就可以收发数据了。 (2) 客户进程发起断连请求(主动关闭)的状态转换过程 客户进程要发起断连,其TCP实体就发一个SYN置1的分组,等待确认ACK的到达 由ESTABLISHED状态变为FIN_WAIT_1状态。 运行客户进程的主机收到确认ACK,一个方向的连接关闭 进入FIN_WAIT_2状态。 运行客户进程的主机收到运行服务器的主机发送的FIN置1的分组后,应响应确认ACK。 收到确认ACK,连接不是立即进入到关闭CLOSED,而是先进入TIME_WAIT状态。 TCP在TIME_WAIT状态等待2MSL(MSL表示分组在网络中的寿命),才删除原来建立的连接记录 返回CLOSED状态。,8.3.2 TCP的C/S模型时序图 面向连接的C/S模型的典型时序图说明:服务器必须首先启动,直到它执行accept()调用,进入等待状态,方可接收客户机请求。否则,客户机的connect()调用将返回出错代码,连接宣告失败。,面向连接的C/S模型的典型时序图,面向连接服务器处理的请求C/S模型工作过程: 服务进程首先调用socket( )创建一个字节流套接字,并调用bind( )将服务器地址捆扎在该套接字上,接着调用listen( )监听连接请求,随后调用accept( )做好与客户进程建立连接的准备,无连接请求时,服务进程被阻塞。当连接请求到来后,服务器进程被唤醒,建立一个新的Socket,并用新套接字同客户进程的套接字建立连接,而服务进程最早生成的套接字则继续用于监听网络上的服务请求。 客户进程调用socket( )创建字节流套接字,然后调用connect( )向服务进程发出连接请求。 服务进程和客户进程通过调用read( )/recv( )和Write( )/send( )交换数据。,8.4 基于UDP的socket 程序设计,8.4.1 UDP编程模式 UDP提供不保证顺序的用户数据报传输服务。在比较简单的应用中,客户机常常只用单个UDP报文来发送请求,服务器也用单个报文回送应答。这种情况下,UDP服务器和客户机间的交互程序采用循环结构是非常有利的。图表明了这种处理结构。,图 采用循环结构的UDP服务器与客户机间的交互,8.5 输入输出多路复用,输入输出多路复用基本工作原理: 输入输出多路复用是一种特殊的阻塞式输入输出模式,其特点:用select()调用指示内核
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度按揭房屋买卖合同债权债务处理及原贷方贷款还款方式变更协议
- 二零二五年度地方特色美食加盟店合同
- 2025年度钢结构工程劳务分包及售后支持合同
- 电商代理政策法规研究-深度研究
- 高效激光治疗设备企业制定与实施新质生产力战略研究报告
- 独立医学实验室远程医疗服务行业深度调研及发展战略咨询报告
- 家居装饰及家具卖场AI应用企业制定与实施新质生产力战略研究报告
- 环保材料产品设计企业制定与实施新质生产力战略研究报告
- 高分辨率质谱仪行业跨境出海战略研究报告
- 高架路照明方案行业跨境出海战略研究报告
- 中国石油转观念勇担当创一流心得体会 中国石油转观念勇担当创一流心得
- 中石油职称俄语
- 七年级历史下册(人教版1-5课)测试题
- 苏州职业大学职业适应性测试题库2021
- 辽宁升联生物科技有限公司年产1.42万吨化学农药原药智能化示范项目环境影响报告书
- 2015-2022年江苏食品药品职业技术学院高职单招语文/数学/英语笔试参考题库含答案解析
- 流浪地球2:重返家园-漫游《宇宙的边疆》 教学设计
- 夜空中最亮的星二部合唱简谱
- GB/T 26695-2011家具用钢化玻璃板
- GB/T 18015.5-2007数字通信用对绞或星绞多芯对称电缆第5部分:具有600MHz及以下传输特性的对绞或星绞对称电缆水平层布线电缆分规范
- GB/T 12964-2003硅单晶抛光片
评论
0/150
提交评论