计算机网络应用程序设计.ppt
《计算机网络应用程序设计.ppt》由会员分享,可在线阅读,更多相关《计算机网络应用程序设计.ppt(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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从被动(倾听)插从被动(倾听)插口的完成连接队列中接收下一个连接请求。如果该完成连接队列空,口的完
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 应用 程序设计
限制150内