《计算机网络应用程序设计.ppt》由会员分享,可在线阅读,更多相关《计算机网络应用程序设计.ppt(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第章计算机网络应用程序设计第章计算机网络应用程序设计 8.1 套接口套接口API的有关概念的有关概念8.2 基本基本Socket函数函数8.3 基于基于TCP的的socket程序设计程序设计8.4 基于基于UDP的的socket 程序设计程序设计8.5 输入输出多路复用输入输出多路复用8.6 并发服务器程序设计并发服务器程序设计8.1 套接口API的有关概念8.1.1 8.1.1 网络应用编程接口网络应用编程接口网络应用编程接口网络应用编程接口n nBerkeleyBerkeley套接口套接口APIAPIn nWinSockWinSockn n远程过程调用(远程过程调用(RPCRPC)8.1.
2、2 socket8.1.2 socket编程模型及类型编程模型及类型编程模型及类型编程模型及类型 套接口可分如下套接口可分如下套接口可分如下套接口可分如下5 5种类型:种类型:种类型:种类型:流式套接字、数据报套接字、流式套接字、数据报套接字、流式套接字、数据报套接字、流式套接字、数据报套接字、原始套接字、原始套接字、原始套接字、原始套接字、SOCK_SEQPACKETSOCK_SEQPACKET及及及及SOCK_RDMSOCK_RDM。n n流式套接字定义了一种可靠的面向连接的服务,实现了无差错的数据传流式套接字定义了一种可靠的面向连接的服务,实现了无差错的数据传流式套接字定义了一种可靠的面
3、向连接的服务,实现了无差错的数据传流式套接字定义了一种可靠的面向连接的服务,实现了无差错的数据传输。输。输。输。n n数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠。传输,是无序的,并且不保证可靠。传输,是无序的,并且不保证可靠。传输,是无序的,并且不保证可靠。n n原始套接字允许对低层协议如原始套接字允许对低层协议如原始套接字允许对低层协议如原始套接字允许对低层协
4、议如IPIP或或或或ICMPICMP直接访问,主要用于新的网络直接访问,主要用于新的网络直接访问,主要用于新的网络直接访问,主要用于新的网络协议实现的测试等协议实现的测试等协议实现的测试等协议实现的测试等。InternetInternet的的的的SocketSocket编程模型编程模型编程模型编程模型8.1.3 socket8.1.3 socket地址地址地址地址应用进程的标识应用进程的标识应用进程的标识应用进程的标识 Internet Internet上两台主机种的进程间要进行通信,必须能上两台主机种的进程间要进行通信,必须能上两台主机种的进程间要进行通信,必须能上两台主机种的进程间要进行通
5、信,必须能够互相识别。用于标识进程的信息有两个:够互相识别。用于标识进程的信息有两个:够互相识别。用于标识进程的信息有两个:够互相识别。用于标识进程的信息有两个:n n主机名或主机地址主机名或主机地址主机名或主机地址主机名或主机地址n n主机内部标识进程的标识符主机内部标识进程的标识符主机内部标识进程的标识符主机内部标识进程的标识符 这两部分合在一起,成为套接口地址(这两部分合在一起,成为套接口地址(这两部分合在一起,成为套接口地址(这两部分合在一起,成为套接口地址(计算机通信的基础计算机通信的基础计算机通信的基础计算机通信的基础构筑块构筑块构筑块构筑块 )8.1.4 8.1.4 通信进程的阻
6、塞和非阻塞方式通信进程的阻塞和非阻塞方式通信进程的阻塞和非阻塞方式通信进程的阻塞和非阻塞方式 对于运行状态中的进程来说,当某些条件不具备,对于运行状态中的进程来说,当某些条件不具备,对于运行状态中的进程来说,当某些条件不具备,对于运行状态中的进程来说,当某些条件不具备,如输入输出条件还没有准备好时,该进程可以有两种处理如输入输出条件还没有准备好时,该进程可以有两种处理如输入输出条件还没有准备好时,该进程可以有两种处理如输入输出条件还没有准备好时,该进程可以有两种处理方式:阻塞与非阻塞。方式:阻塞与非阻塞。方式:阻塞与非阻塞。方式:阻塞与非阻塞。n n阻塞方式阻塞方式阻塞方式阻塞方式在阻塞方式下
7、,当输入输出条件还没有准备好时,就将进在阻塞方式下,当输入输出条件还没有准备好时,就将进在阻塞方式下,当输入输出条件还没有准备好时,就将进在阻塞方式下,当输入输出条件还没有准备好时,就将进程转入阻塞状态,标记阻塞原因,并保留当前进程现场信程转入阻塞状态,标记阻塞原因,并保留当前进程现场信程转入阻塞状态,标记阻塞原因,并保留当前进程现场信程转入阻塞状态,标记阻塞原因,并保留当前进程现场信息,然后将控制转入进程调度程序,等阻塞原因解除后,息,然后将控制转入进程调度程序,等阻塞原因解除后,息,然后将控制转入进程调度程序,等阻塞原因解除后,息,然后将控制转入进程调度程序,等阻塞原因解除后,将进程状态由
8、阻塞变成就绪等待处理机,或直接获得由调将进程状态由阻塞变成就绪等待处理机,或直接获得由调将进程状态由阻塞变成就绪等待处理机,或直接获得由调将进程状态由阻塞变成就绪等待处理机,或直接获得由调度程序再次分配的处理机,恢复阻塞的现场继续执行。度程序再次分配的处理机,恢复阻塞的现场继续执行。度程序再次分配的处理机,恢复阻塞的现场继续执行。度程序再次分配的处理机,恢复阻塞的现场继续执行。n n非阻塞方式非阻塞方式非阻塞方式非阻塞方式在非阻塞方式下,当输入输出条件还没有准备好时,进程在非阻塞方式下,当输入输出条件还没有准备好时,进程在非阻塞方式下,当输入输出条件还没有准备好时,进程在非阻塞方式下,当输入输
9、出条件还没有准备好时,进程仍处于运行状态,通过循环,反复进行某条件的查询。一仍处于运行状态,通过循环,反复进行某条件的查询。一仍处于运行状态,通过循环,反复进行某条件的查询。一仍处于运行状态,通过循环,反复进行某条件的查询。一般说来,阻塞机制可以防止进程在循环反复的查询等待中般说来,阻塞机制可以防止进程在循环反复的查询等待中般说来,阻塞机制可以防止进程在循环反复的查询等待中般说来,阻塞机制可以防止进程在循环反复的查询等待中造成资源浪费。但是有时在应用中需要进程一直处于运行造成资源浪费。但是有时在应用中需要进程一直处于运行造成资源浪费。但是有时在应用中需要进程一直处于运行造成资源浪费。但是有时在
10、应用中需要进程一直处于运行状态,不希望进程在对状态,不希望进程在对状态,不希望进程在对状态,不希望进程在对socketsocket的操作中阻塞,这时就要使的操作中阻塞,这时就要使的操作中阻塞,这时就要使的操作中阻塞,这时就要使用非阻塞机制。用非阻塞机制。用非阻塞机制。用非阻塞机制。8.2 基本Socket函数8.2.1 初始化套接口初始化套接口服务绑定服务绑定socket()()1、功能:在应用程序中使用插口在应用程序中使用插口APIAPI时,首先要创建一个插口时,首先要创建一个插口-socket-socket。为。为了说明什么是了说明什么是socketsocket,可以打个比方:一个电话插座
11、,既可以接电话,可以打个比方:一个电话插座,既可以接电话机打电话,也可以接传真机发传真,还可以接计算机上网。接上什么机打电话,也可以接传真机发传真,还可以接计算机上网。接上什么设备,就是绑定了什么服务。创建一个插口,就是创建一个通信,需设备,就是绑定了什么服务。创建一个插口,就是创建一个通信,需要指定提供什么服务,即为一个标识符绑定某个服务,并为之分配资要指定提供什么服务,即为一个标识符绑定某个服务,并为之分配资源。这个标识就是该插口标识。源。这个标识就是该插口标识。n n应用程序调用应用程序调用socketsocket()函数将创建一个插口。()函数将创建一个插口。2、原型8.2.2 本地地
12、址绑定本地地址绑定bind()1、功能、功能调用函数调用函数调用函数调用函数bindbind(),可以将本地地址与插口绑定在一起。(),可以将本地地址与插口绑定在一起。(),可以将本地地址与插口绑定在一起。(),可以将本地地址与插口绑定在一起。调用成功时,返回调用成功时,返回调用成功时,返回调用成功时,返回0 0;否则,返回;否则,返回;否则,返回;否则,返回1 1,并设置全局变量,并设置全局变量,并设置全局变量,并设置全局变量errnoerrno为错误类型为错误类型为错误类型为错误类型 2、原型参数说明参数说明 sockfd是函数是函数socket返回的插口描述字;返回的插口描述字;myad
13、dr是特定于协议的地址结构体的指针,指向本地插口地址;是特定于协议的地址结构体的指针,指向本地插口地址;addrlen是插口地址结构体的长度。是插口地址结构体的长度。8.2.3 8.2.3 建立套接口连接绑定远程服务器地址建立套接口连接绑定远程服务器地址建立套接口连接绑定远程服务器地址建立套接口连接绑定远程服务器地址connect()connect()n n功能功能函数函数函数函数connect()connect()可以让客户机程序建立一个与可以让客户机程序建立一个与可以让客户机程序建立一个与可以让客户机程序建立一个与TCPTCP服务器的服务器的服务器的服务器的连接连接连接连接.n n原型原型
14、 参数:参数:sockfd是函数是函数socket返回的插口描述符;返回的插口描述符;servaddr指定远程服务器的插口地址;指定远程服务器的插口地址;addrlen是插口地址结构体的长度。是插口地址结构体的长度。8.2.4 套接口被动转换套接口被动转换listen()n n函数函数函数函数listen()listen()有两个功能。有两个功能。有两个功能。有两个功能。(1 1)主动插口的被动转换)主动插口的被动转换)主动插口的被动转换)主动插口的被动转换socket()socket()创建的插口都是主动插口,只可以用来(调用创建的插口都是主动插口,只可以用来(调用创建的插口都是主动插口,只
15、可以用来(调用创建的插口都是主动插口,只可以用来(调用connect()connect())进行主动连接(发出)进行主动连接(发出)进行主动连接(发出)进行主动连接(发出请求),不能接收连接请求。请求),不能接收连接请求。请求),不能接收连接请求。请求),不能接收连接请求。listen()listen()函数将未连接的主动插口转换为被动插口,即倾函数将未连接的主动插口转换为被动插口,即倾函数将未连接的主动插口转换为被动插口,即倾函数将未连接的主动插口转换为被动插口,即倾听插口(听插口(听插口(听插口(listening socketlistening socket),告诉操作系统该插口可以接收
16、连接请求。所以),告诉操作系统该插口可以接收连接请求。所以),告诉操作系统该插口可以接收连接请求。所以),告诉操作系统该插口可以接收连接请求。所以listen()listen()也称也称也称也称为创建倾听插口函数。为创建倾听插口函数。为创建倾听插口函数。为创建倾听插口函数。(2 2)设置最大请求连接数)设置最大请求连接数)设置最大请求连接数)设置最大请求连接数listen()listen()用一个参数(用一个参数(用一个参数(用一个参数(backlogbacklog)指定完成队列的最大长度。如果一个客户机的)指定完成队列的最大长度。如果一个客户机的)指定完成队列的最大长度。如果一个客户机的)指
17、定完成队列的最大长度。如果一个客户机的SYNSYN数据数据数据数据段到达时,倾听插口的完成队列已经满了,段到达时,倾听插口的完成队列已经满了,段到达时,倾听插口的完成队列已经满了,段到达时,倾听插口的完成队列已经满了,TCPTCP则忽略这个则忽略这个则忽略这个则忽略这个SYNSYN数据段。数据段。数据段。数据段。listen()listen()函数执行成功,返回函数执行成功,返回函数执行成功,返回函数执行成功,返回0 0,服务器的,服务器的,服务器的,服务器的TCPTCP状态由状态由状态由状态由CLOSEDCLOSED转变成转变成转变成转变成LISTENLISTEN,成为被,成为被,成为被,成
18、为被动模式;执行失败,返回动模式;执行失败,返回动模式;执行失败,返回动模式;执行失败,返回1 1。n n 原型原型原型原型参数:参数:sockfd为要转换的已绑定本地地址的插口描述符;为要转换的已绑定本地地址的插口描述符;backlog设置请求队列的最大长度,表示被动(倾听)插口能够接设置请求队列的最大长度,表示被动(倾听)插口能够接收的最大数目的未接收连接收的最大数目的未接收连接(相当于窗口通告相当于窗口通告)。8.2.4 套接口被动转换listen()n n创建TCP服务器倾听插口的过程(1)首先调用socket()函数创建一个主动插口;(2)调用bind()函数进行插口地址绑定;(3)
19、调用listen()函数进行转换。8.2.5 从被动套接口的完成队列中接受一个连从被动套接口的完成队列中接受一个连接请求接请求accept()n n功能一个插口被创建、用一个插口被创建、用bindbind绑定本地地址并转换成被动模式后,必须接绑定本地地址并转换成被动模式后,必须接收一个连接请求。一旦接收了连接,服务器就能使用该连接与客户机收一个连接请求。一旦接收了连接,服务器就能使用该连接与客户机进行通信。面向连接传输协议的服务器调用进行通信。面向连接传输协议的服务器调用 acceptaccept从被动(倾听)插从被动(倾听)插口的完成连接队列中接收下一个连接请求。如果该完成连接队列空,口的完
20、成连接队列中接收下一个连接请求。如果该完成连接队列空,则使这个进程睡眠。则使这个进程睡眠。n n原型原型 参数:参数:sockfd为服务器已经创建并绑定到指定插口地址的插口描述符;为服务器已经创建并绑定到指定插口地址的插口描述符;addr是指向一个是指向一个Internet插口地址结构体的指针;插口地址结构体的指针;addrlen是指向一个整型数的指针。是指向一个整型数的指针。8.2.5 从被动套接口的完成队列中接受一个连接请求accept()n naccept()工作过程工作过程 TCPTCP使用侦听插口接收客户机的连接请求。如使用侦听插口接收客户机的连接请求。如果调用果调用accept()
21、accept()时,倾听插口的完成队列中有已经时,倾听插口的完成队列中有已经完成完成3 3次握手的次握手的TCPTCP连接,连接,accept()accept()就从队列的首部就从队列的首部读取第一个连接,并返回该连接的描述符。如果读取第一个连接,并返回该连接的描述符。如果调用调用accept()accept()时,倾听插口的完成队列为空,进程时,倾听插口的完成队列为空,进程将阻塞,等待出现新的完成将阻塞,等待出现新的完成3 3次握手的次握手的TCPTCP连接送连接送到完成队列;到完成队列;TCPTCP协议为服务器创建一个新的连协议为服务器创建一个新的连接插口来标识这条新的连接,接插口来标识这
22、条新的连接,accept()accept()返回该新连返回该新连接的描述符接的描述符。8.2.6 基本套接口基本套接口I/O函数列表函数列表8.2.7 8.2.7 关闭插口通道与撤消套接口关闭插口通道与撤消套接口关闭插口通道与撤消套接口关闭插口通道与撤消套接口 1 1、概述、概述建立一对插口的连接之后,就可以进行通信了。由于建立一对插口的连接之后,就可以进行通信了。由于TCPTCP连接是全双连接是全双工的,对每一个套接口来说,都可以看作在使用读、写两个通道进行工的,对每一个套接口来说,都可以看作在使用读、写两个通道进行通信。于是,关闭一个插口通信可以有两种不同级别的方法。通信。于是,关闭一个插
23、口通信可以有两种不同级别的方法。(1 1)关闭插口通道,具体有三种方式:)关闭插口通道,具体有三种方式:SHUT_RD SHUT_RD关闭连接的读通道;关闭连接的读通道;SHUT_WR SHUT_WR关闭连接的写通道;关闭连接的写通道;SHUT_RDWR SHUT_RDWR关闭连接的读写通道。关闭连接的读写通道。(2 2)撤消套接口(句柄),同时关闭了连接的读写通道。)撤消套接口(句柄),同时关闭了连接的读写通道。这两种方式分别用两个不同的函数这两种方式分别用两个不同的函数shutdown()shutdown()和和close()close()实现。实现。2.close()2.close()原
24、型原型函数函数close()close()用于撤消一个插口,终止其用于撤消一个插口,终止其TCPTCP连接,其原型连接,其原型为为#include#include in close(in close(intint sockfdsockfd)3.shutdown()3.shutdown()原型原型#include sys/#include intint shutdown(shutdown(intint sockfdsockfd,intint howtohowto););8.3 基于TCP的socket程序设计8.3.1 TCP8.3.1 TCP有限状态机有限状态机有限状态机有限状态机1 1、TC
25、PTCP有限状态机的概念有限状态机的概念有限状态机的概念有限状态机的概念 在网络通信中,一个健壮的插口应用程序必在网络通信中,一个健壮的插口应用程序必在网络通信中,一个健壮的插口应用程序必在网络通信中,一个健壮的插口应用程序必须能够处理通信过程中可能出现的各种状态。对须能够处理通信过程中可能出现的各种状态。对须能够处理通信过程中可能出现的各种状态。对须能够处理通信过程中可能出现的各种状态。对于于于于TCPTCP来说,不同的状态将决定传输实体对一些来说,不同的状态将决定传输实体对一些来说,不同的状态将决定传输实体对一些来说,不同的状态将决定传输实体对一些事件的响应。描述事件的响应。描述事件的响应
26、。描述事件的响应。描述TCPTCP在响应各种事件时,各个在响应各种事件时,各个在响应各种事件时,各个在响应各种事件时,各个宏观状态之间相互作用的规则称为宏观状态之间相互作用的规则称为宏观状态之间相互作用的规则称为宏观状态之间相互作用的规则称为TCPTCP有限状态有限状态有限状态有限状态机(或称机(或称机(或称机(或称TCPTCP状态转换图),它由图所示的状态转换图),它由图所示的状态转换图),它由图所示的状态转换图),它由图所示的1111种种种种状态组成。状态组成。状态组成。状态组成。TCPTCP的有限状态机的有限状态机的有限状态机的有限状态机2 2、状态转换分析、状态转换分析、状态转换分析、
27、状态转换分析 (1 1)客户进程发起连接的状态转换过程客户进程发起连接的状态转换过程客户进程发起连接的状态转换过程客户进程发起连接的状态转换过程1.1.一个主机的客户进程要发起连接,其一个主机的客户进程要发起连接,其一个主机的客户进程要发起连接,其一个主机的客户进程要发起连接,其TCPTCP实体就发一个实体就发一个实体就发一个实体就发一个SYNSYN置置置置1 1的分的分的分的分组组组组 由由由由CLOSEDCLOSED状态进入状态进入状态进入状态进入SYN_SENTSYN_SENT状态。状态。状态。状态。2.2.收到来自进程的收到来自进程的收到来自进程的收到来自进程的SYNSYN和和和和AC
28、KACK,TCPTCP就发出三次握手中的最后一个就发出三次握手中的最后一个就发出三次握手中的最后一个就发出三次握手中的最后一个ACK ACK 进入进入进入进入ESTABLISHEDESTABLISHED状态。这时就可以收发数据了。状态。这时就可以收发数据了。状态。这时就可以收发数据了。状态。这时就可以收发数据了。(2 2)客户进程发起断连请求(主动关闭)的状态转换过程客户进程发起断连请求(主动关闭)的状态转换过程客户进程发起断连请求(主动关闭)的状态转换过程客户进程发起断连请求(主动关闭)的状态转换过程1.1.客户进程要发起断连,其客户进程要发起断连,其客户进程要发起断连,其客户进程要发起断连
29、,其TCPTCP实体就发一个实体就发一个实体就发一个实体就发一个SYNSYN置置置置1 1的分组,等待确的分组,等待确的分组,等待确的分组,等待确认认认认ACKACK的到达的到达的到达的到达 由由由由ESTABLISHEDESTABLISHED状态变为状态变为状态变为状态变为FIN_WAIT_1FIN_WAIT_1状态。状态。状态。状态。2.2.运行客户进程的主机收到确认运行客户进程的主机收到确认运行客户进程的主机收到确认运行客户进程的主机收到确认ACKACK,一个方向的连接关闭,一个方向的连接关闭,一个方向的连接关闭,一个方向的连接关闭 进入进入进入进入FIN_WAIT_2FIN_WAIT_
30、2状态。状态。状态。状态。3.3.运行客户进程的主机收到运行服务器的主机发送的运行客户进程的主机收到运行服务器的主机发送的运行客户进程的主机收到运行服务器的主机发送的运行客户进程的主机收到运行服务器的主机发送的FINFIN置置置置1 1的分组后,的分组后,的分组后,的分组后,应响应确认应响应确认应响应确认应响应确认ACKACK。4.4.收到确认收到确认收到确认收到确认ACKACK,连接不是立即进入到关闭,连接不是立即进入到关闭,连接不是立即进入到关闭,连接不是立即进入到关闭CLOSEDCLOSED,而是先进入,而是先进入,而是先进入,而是先进入TIME_WAITTIME_WAIT状态。状态。状
31、态。状态。5.5.TCP TCP在在在在TIME_WAITTIME_WAIT状态等待状态等待状态等待状态等待2MSL2MSL(MSLMSL表示分组在网络中的寿命)表示分组在网络中的寿命)表示分组在网络中的寿命)表示分组在网络中的寿命),才删除原来建立的连接记录,才删除原来建立的连接记录,才删除原来建立的连接记录,才删除原来建立的连接记录 返回返回返回返回CLOSEDCLOSED状态状态状态状态。8.3.2 TCP8.3.2 TCP的的的的C/SC/S模型时序图模型时序图模型时序图模型时序图 面向连接的面向连接的面向连接的面向连接的C/SC/S模型的典型时序图说明:服务器必须模型的典型时序图说明
32、:服务器必须模型的典型时序图说明:服务器必须模型的典型时序图说明:服务器必须首先启动,直到它执行首先启动,直到它执行首先启动,直到它执行首先启动,直到它执行acceptaccept()调用,进入等待状态,()调用,进入等待状态,()调用,进入等待状态,()调用,进入等待状态,方可接收客户机请求。否则,客户机的方可接收客户机请求。否则,客户机的方可接收客户机请求。否则,客户机的方可接收客户机请求。否则,客户机的connect()connect()调用将返调用将返调用将返调用将返回出错代码,连接宣告失败。回出错代码,连接宣告失败。回出错代码,连接宣告失败。回出错代码,连接宣告失败。面向连接的C/S
33、模型的典型时序图 面向连接服务器处理的请求面向连接服务器处理的请求面向连接服务器处理的请求面向连接服务器处理的请求C/SC/S模型工作过程:模型工作过程:模型工作过程:模型工作过程:1.1.服务进程首先调用服务进程首先调用服务进程首先调用服务进程首先调用socket()socket()创建一个字节流套接创建一个字节流套接创建一个字节流套接创建一个字节流套接字,并调用字,并调用字,并调用字,并调用bind()bind()将服务器地址捆扎在该套接字上,接将服务器地址捆扎在该套接字上,接将服务器地址捆扎在该套接字上,接将服务器地址捆扎在该套接字上,接着调用着调用着调用着调用listen()liste
34、n()监听连接请求,随后调用监听连接请求,随后调用监听连接请求,随后调用监听连接请求,随后调用accept()accept()做好与做好与做好与做好与客户进程建立连接的准备,无连接请求时,服务进程被客户进程建立连接的准备,无连接请求时,服务进程被客户进程建立连接的准备,无连接请求时,服务进程被客户进程建立连接的准备,无连接请求时,服务进程被阻塞。当连接请求到来后,服务器进程被唤醒,建立一阻塞。当连接请求到来后,服务器进程被唤醒,建立一阻塞。当连接请求到来后,服务器进程被唤醒,建立一阻塞。当连接请求到来后,服务器进程被唤醒,建立一个新的个新的个新的个新的SocketSocket,并用新套接字同客
35、户进程的套接字建立,并用新套接字同客户进程的套接字建立,并用新套接字同客户进程的套接字建立,并用新套接字同客户进程的套接字建立连接,而服务进程最早生成的套接字则继续用于监听网连接,而服务进程最早生成的套接字则继续用于监听网连接,而服务进程最早生成的套接字则继续用于监听网连接,而服务进程最早生成的套接字则继续用于监听网络上的服务请求。络上的服务请求。络上的服务请求。络上的服务请求。2.2.客户进程调用客户进程调用客户进程调用客户进程调用socket()socket()创建字节流套接字,然后创建字节流套接字,然后创建字节流套接字,然后创建字节流套接字,然后调用调用调用调用connect()conn
36、ect()向服务进程发出连接请求。向服务进程发出连接请求。向服务进程发出连接请求。向服务进程发出连接请求。3.3.服务进程和客户进程通过调用服务进程和客户进程通过调用服务进程和客户进程通过调用服务进程和客户进程通过调用read()/read()/recvrecv()()和和和和WriteWrite()/send()()/send()交换数据。交换数据。交换数据。交换数据。8.4 基于UDP的socket 程序设计8.4.1 UDP8.4.1 UDP编程模式编程模式编程模式编程模式 UDP UDP提供不保证顺序的用户数据报传输服务。在比较提供不保证顺序的用户数据报传输服务。在比较提供不保证顺序的
37、用户数据报传输服务。在比较提供不保证顺序的用户数据报传输服务。在比较简单的应用中,客户机常常只用单个简单的应用中,客户机常常只用单个简单的应用中,客户机常常只用单个简单的应用中,客户机常常只用单个UDPUDP报文来发送请求,报文来发送请求,报文来发送请求,报文来发送请求,服务器也用单个报文回送应答。这种情况下,服务器也用单个报文回送应答。这种情况下,服务器也用单个报文回送应答。这种情况下,服务器也用单个报文回送应答。这种情况下,UDPUDP服务器服务器服务器服务器和客户机间的交互程序采用循环结构是非常有利的。图表和客户机间的交互程序采用循环结构是非常有利的。图表和客户机间的交互程序采用循环结构
38、是非常有利的。图表和客户机间的交互程序采用循环结构是非常有利的。图表明了这种处理结构。明了这种处理结构。明了这种处理结构。明了这种处理结构。图图 采用循环结构的采用循环结构的UDP服务器与客户机间的交互服务器与客户机间的交互 8.5 输入输出多路复用n n输入输出多路复用基本工作原理:输入输出多路复用是一种特殊的阻塞式输入输出模式,其特点:用select()调用指示内核监视多路流事件,当一个或多个事件发生或经过某个指定时间后,就唤醒进程,就绪的套接口描述符可以进行相应的输入输出操作。8.6 并发服务器程序设计n n多进程并发服务器的基本工作原理:在多进程模式下,使用多个进程来处理不同客户的请求。一开始,只运行一个服务进程,用来侦听是否有客户的连接到来。每当该服务进程接收接收到一个连接请求时,就调用fork()函数生产一个子进程,让该子进程处理到来的请求,父进程继续侦听还有无其他客户的连接请求。谢谢谢谢 大家大家