计算机通信与实验.ppt
《计算机通信与实验.ppt》由会员分享,可在线阅读,更多相关《计算机通信与实验.ppt(61页珍藏版)》请在三一办公上搜索。
1、第七章 基本网络开发技术,2,7.1 网络应用开发的基础知识7.2 C/S编程模式和套接字7.3 B/S编程模式及相关技术7.4 习 题,基本网络开发技术,3,网络应用开发的基础知识,7.1 网络应用开发的基础知识服务器和客户的概念标示网络应用网络应用的定位地址两类不同的编程模式,4,服务器和客户的概念,一般地,把那些提供网络服务的应用程序称为服务器程序(也可简称为服务器),接受网络服务的应用程序称为客户程序(也可简称为客户),它们之间的通信交换称为客户服务器交互模式(Client-server Paradigm of Interaction),简称C/S模式,或C/S结构。通常地,这个术语指
2、一个被动地等待通信的、能够提供某种网络服务的程序,而不是运行它的计算机。然而,当一台计算机被用来运行一个或几个服务器程序时,这台计算机本身有时也被称作服务器。准确地说,服务器(Server)这个术语来指那些运行的程序而不是计算机。,5,标示网络应用网络应用的定位地址,应用的网络定位地址=计算机的IP地址+应用对应的TCP/UDP端口号,6,标示网络应用网络应用的定位地址,常见应用服务的端口,7,两类不同的编程模式,C/S模式绝大部分的网络应用程序从根本上而言都是C/S模式.C/S模式下,一个应用通常包含了两部分程序:服务器程序和客户程序,它们需要分别安装、设置。对于普通的计算机用户而言,为了获
3、取网络服务就必须安装和设置特定的客户程序,未免要求过高。B/S模式客户机统一,浏览器(Browser)成为通用的客户端,网络开发只需要开发服务器端,用户计算机上也不需要为每一个网络应用各安装、设置一个客户端软件,大大简化了网络应用的开发和部署。这种更为便利的开发方式逐步流行,称之为浏览器/服务器交互模式(Browser-server Paradigm of Interaction),简称B/S模式,。,8,C/S编程模式和套接字,7.2.1 C/S编程模式7.2.2 套接字接口7.2.3 实现套接字API的过程7.2.4 套接字API的应用示例,9,C/S编程模式,对于一个服务器程序而言,在同
4、一时刻可能有多个客户来请求服务,这时有两种方案:方案1:很自然可以想到,下一个客户获得服务必须等待前一个客户服务结束,以文件传输服务为例,如果用户请求的文件很小,服务器在用户不能觉察的时间内就可以完成服务,方案1可以很好工作。但如果用户请求的文件很大,大到服务器需要几分钟、几十分钟甚至更长的时间才能完成服务,对排队等候的用户而言可能就无法忍受了。方案2:显然是更理想的方式,这时因为有多个客户,需要多个(同样种)服务器提供服务,也就是在运行服务器的计算机上必须同时运行多个服务器应用,这就是并发。并发需要操作系统的支持,今天的操作系统都能满足。再拿文件服务来举例,虽然只有一个文件服务的服务器应用程
5、序,但同一时刻计算机把它运行了多次,每一个运行着的服务器为一个客户提供客户需要的文件服务。一个运行着的服务器可以称为服务器的一个控制线程。动态创建:也就是服务器在每个请求到来时创建一个新的控制线程来提供服务,它与已有的控制线程并发工作。,10,C/S编程模式,一个服务器应用程序由两部分组成:一部分负责接收请求和生成新控制线程,另一部分包含处理单个请求完成服务的代码。在服务器程序设计时,必须考虑到并发的情况,并通过动态创建来解决这个问题。,11,C/S编程模式,服务器同时又多个控制线程工作,客户如何找到属于自己的线程并与它交互呢?拿TCP来说,客户的请求中包含了:目的IP,目的TCP端口号,源I
6、P,源TCP端口号,目的IP帮助客户找到正确的提供服务的计算机,目的TCP端口号为客户在目的计算机上的不同类型服务器中找到正确的服务器程序,而源IP和源TCP端口号则成为为这个客户启动的控制线程的标识,服务器通过它们使正确的控制线程与正确的客户交互。,12,套接字接口,套接字是从英文单词socket翻译而来,它是网络通信的基本构件。可以把套接字想象成连接应用和底层网络实现的“门”,发送信息的一方把信息送出“门”,底层的网络实现保证信息正确无误地到达接收发的“门”口供接收.套接字是网络传输资源的描述符(指针)。套接字最早是U.C.Berkeley大学BSD UNIX系统中的一部分,13,以Win
7、dows Sockets为例来看看应用程序与socket之间的关系,如下图:,套接字接口,14,1Socket过程2Close过程3Bind过程4Listen过程5Accept过程6Connect过程7Send、Sendto与Sendmsg过程8Recv、Recvfrom与Recvmsg过程9辅助过程,实现套接字API的过程,15,实现套接字API的过程,下图给出了最简单的服务器和客户套接字API过程。,16,1Socket过程Socket过程创建一个套接字,返回一个整型描述符:descriptor=socket(protocolfamilY,type,protocol)参数protocolf
8、amily表示:套接字使用的协议簇。例如,值PF_INET表示TCP/IP协议系列。参数type表示:套接字所使用通信的类型。两个最常用的类型是面向连接的流传输(用值SOCK_STREAM表示)和无连接的面向消息传输(用值SOCK_DGRAM表示)。参数protocol:表示套接字所使用的特定传输协议。在type参数后加上protocol参数允许单个协议系列包括两个或多个提供同一个服务的协议。当然,protocol参数所能取的值取决于协议簇。例如,T C P/I P协议系列包含了TCP协议,而其他的系列并不包含。,实现套接字API的过程,17,2Close过程close过程告诉系统终止对一个套
9、接字的使用(Windows的套接字接口用closesocket而不是close)。它的形式为:close(socket)其中socket是要关闭的套接字的描述符。如果该套接字使用的是面向连接的传输协议,close在关闭套接字前先终止连接。关闭一个套接字意味着立即终止对它的使用描述符被释放,以防止应用程序发送更多的数据;传输协议也停止接收指向该套接字的信息,以防止应用程序接收更多的数据。,实现套接字API的过程,18,3Bind过程服务器使用bind过程提供一个协议端口号,并通过它等待通信。bind有三个参数:bind(socket,localaddr,addrlen)参数socket是一个套接
10、字的描述符参数localaddr是一个结构,参数addrlen是一个整数,指出地址的长度。,实现套接字API的过程,19,3Bind过程这个表示地址的一般格式被定义为一个sockaddr结构。它已经推出了许多版本,最近的伯克利代码定义的sockaddr结构包含三个域:struct sockaddr u_char sa_len;/*地址总长*/u_char sa_family;/*地址簇*/char sa_data14;/*地址本身*/;sa_len域表示地址长度。sa_family域表示地址所属的协议簇(字符常量AF_INET表示TCP/IP地址)。最后,sa_data域包含地址。每个协议簇为
11、sockaddr结构中的sa_data域定义自己的精确格式。,实现套接字API的过程,20,3Bind过程 例如,TCP/IP协议使用sockaddr_in来定义地址:struct sockaddr_in u_char sin_len;/*地址总长*/u_char sin_family;/*地址簇*/u_short sin_port;/*协议端口号*/struct in_addr sin_addr;/*计算机IP地址*/char sin_zero8;/*未用(置为0)*/;sockaddr_in结构的前两个域正好对应一般的sockaddr结构的前两个域,后三个域定义了TCP/IP协议所希望的确
12、切地址格式。,实现套接字API的过程,21,3Bind过程有两点值得注意:第一,每个地址标识了一台计算机以及该计算机上的一个特定应用。sin_addr域包含这台计算机的IP地址,而sin_port域包含这个应用的协议端口号。第二,尽管TCP/IP只需要六个字节来存放整个地址,一般的sockaddr结构仍保留了十四字节。于是,最终的sockaddr_in结构中包含一个8个字节的全0的域,以使该结构在大小上与sockaddr相同。除了协议端口号外,sockaddr_in结构还包含一个记录IP地址的域。sockaddr_in结构定义了TCP/IP使用的地址表示格式。尽管该结构包含了IP地址的域和协议
13、端口号的域,套接字API仍包含了一个字符常量来允许服务器对该计算机上的任一IP地址指定一个协议端口。,实现套接字API的过程,22,4Listen过程 在说明了一个协议端口后,服务器必须通知操作系统将这个套接字设为被动模式以使它能被用来等待客户的通信。为了做到这一点,服务器调用listen过程,它有两个参数:listen(socket,queuesize)参数socket是套接字的描述符,它已经被创建并绑定于一个本地地址。参数queuesize表示该套接字的请求队列的长度。,实现套接字API的过程,23,5Accept过程 连接传输协议的服务器必须调用accept过程来接受下一个连接请求。如果
14、队列中已经有请求,accept立即返回;如果还没有请求到达,系统挂起服务器直至有客户建立连接。accept调用的形式为:newsock=accept(socket,caddress,caddresslen)参数socket是服务器已经创建并绑定于指定协议端口的套接字的描述符。参数caddress是sockaddr类型结构的地址,而caddresslen则是一个指向整型的指针。accept在参数caddress的域中填入建立连接的客户的地址,并设caddresslen为地址长度。,实现套接字API的过程,24,6Connect过程 客户使用connect过程与指定服务器建立连接。形式为:conn
15、ect(socket,saddress,saddresslen)参数socket是客户端计算机上用于该连接的套接字的描述符。参数saddress是一个sockaddr结构,说明服务器地址与协议端口号(IP地址和协议端口号合在一起有时被称作端地址,即endpoint address)。参数saddresslen是以字节形式说明的服务器地址的长度。当使用TCP这样的面向连接的传输协议时,connect启动一个指定服务器的传输层连接。一般来说,connect是客户用来与已经调用了accept的服务器进行连接的过程。,实现套接字API的过程,25,7Send、Sendto与Sendmsg过程 客户与服
16、务器都需要发送信息。通常客户发送请求,服务器发送应答。如果套接字已连接,send过程可用来传输数据。send有四个参数:send(socket,data,length,flag)参数socket是使用的套接字的描述符。参数data是待发送数据在内存中的地址。参数length是一个整型数,表示数据的字节数,而参数flag则包含了请求特殊选项的位(许多选项是为系统调试设计的,并不能被普通的客户和服务器程序使用)。,实现套接字API的过程,26,7Send、Sendto与Sendmsg过程 Sendto与Sendmsg过程允许客户或服务器使用一个未连接的套接字发送信息,两者都需要调用者说明目的地。S
17、endto将目的地地址作为参数。它的形式为:sendto(socket,data,length,flag,destaddress,addresslen)前四个参数对应于send过程的四个参数。后两个参数说明目的地地址与该地址的长度。参数destaddress的类型为sockaddr结构(特别地,在TCP/IP中为sockaddr_in结构)。,实现套接字API的过程,27,7Send、Sendto与Sendmsg过程 Sendmsg过程完成与Sendto过程相同的操作,但通过定义结构简化了参数。这种较短的参数表使使用Sendmsg的程序更易读:sendmsg(socket,msgstruct,
18、flag)参数msgstruct是一个包括关于目的地地址、该地址长度、待发送信息及该信息长度等内容的结构:struct msgstruct/*sendmsg 使用的结构*/struct sockaddr*m_saddr;/*目的地地址指针*/struct datavec*m_dvec;/*信息(向量)指针*/int m_dvlength;/*向量中项数*/struct access*m_rights;/*访问权表指针*/int m_alength;/*表中项数*/;大多数应用仅仅使用前三个域,说明目的地协议地址和一列组成该信息的数据项。,实现套接字API的过程,28,8Recv、Recvfro
19、m与Recvmsg过程 客户与服务器都需要接收发自另一方的数据。套接字API提供了一些可用的过程。例如,一个应用可以调用recv从一个连接的套接字接收数据。这个过程的形式为:recv(socket,buffer,length,flags)参数socket是从中接收数据的套接字的描述符。参数buffer表示用来存放接收到的数据的内存地址。参数length则表示这个缓冲区的大小。参数flag允许调用者控制一些细节(例如,允许应用在不将信息从套接字中移出的情况下提取它的一个副本等)。,实现套接字API的过程,29,8Recv、Recvfrom与Recvmsg过程 如果一个套接字未连接,它可被用来接收
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 通信 实验

链接地址:https://www.31ppt.com/p-6024193.html