【软件测试】网络应用篇:第四章 客户服务器模式与套接字

来源:互联网 发布:一级级域名怎么设置 编辑:程序博客网 时间:2024/04/28 07:43

第四章 客户服务器模式与套接字

一、知识点

       1、网络应用C/S模式C/S模式概念,协议端口号,插口地址,客户端软件特点,服务器软件特点和并发,B/S模式)

2、应用编程接口APIAPI概念,套接字API的基本结构,套接字API服务器端实现过程,套接字API客户端实现过程)

3、简单例子的套接字API实例

 

第一部分:网络应用C/S模式

二、相互作用的客户-服务器模型:

       1、在TCP/IP互联网中,最主要的进程间相互作用的模式是客户—服务器交互模式(client-server paradigm of interaction)(C/S模式)。

       2、客户和服务器分别是两个应用程序(进程)。客户向服务器发出服务请求,服务器做出响应。

 

三、为什么选择客户-服务器模式

       1、第一个原因:互联网中资源、运算能力和信息不均等的现实。不均等现象不可避免,而客户-服务器模式体现了这种现象并很好地适应了这种现象。

       2、第二个原因:是技术性的。互联网进程通信需要一种机制,为准备通信的进程之间建立联系,为两者的数据交换提供同步。客户-服务器模式完美地解决了上述问题。

       综上所述,C/S模式是客观现实与技术实现相结合的产物。

 

四、客户软件的特点

       1、在进行通信时临时成为客户,但它也可在本地进行其他的计算。

2、被用户调用并在用户计算机上运行,在打算通信时主动向远地服务器发起通信。

3、可与多个服务器进行通信。

4、不需要特殊的硬件和很复杂的操作系统。

 

五、服务器软件的特点

       1、专门用来提供某种服务的程序,可同时处理多个远地或本地客户的请求。

2、在共享计算机上运行。当系统启动时即自动调用并一直不断地运行着。

3、被动等待并接受来自多个客户的通信请求。

4、一般需要强大的硬件和高级的操作系统支持。

 

六、两个术语

       1、服务器:被动等待通信的程序。不是计算机。

       2、服务器级计算机:运行服务器软件的功能强大的计算机。

       硬件厂商把具有高速CPU、大容量存储器、功能强大的操作系统的计算机称为服务器,其实应该称为服务器级计算机。

 

七、允许一台计算机运行多种服务器是实际可行的

       1、可以充分利用硬件资源。因为硬件可以被多种服务所共享。

       2、减少系统管理的负载。因为这种情况可以减少被管理的计算机系统的数量。

       3、如果对服务的需求比较低,那么把服务器合并到一台计算机上能够显著地减少开销,而且并不会明显地降低性能。

 

八、既然允许一台计算机运行多种服务器,那么一个客户发出的请求究竟由哪个服务器来做出响应呢?

       方法:传输协议为每种服务分配了惟一的一个标识符,并要求服务器和客户使用这一标识符。当服务器开始运行时,它向本地协议软件注册它使用的服务标示符。当客户联系远程服务器时,客户需要指定它请求的服务标识符。客户计算机上的传输协议软件在提出请求时,向服务器计算机发送这一标识符,服务器计算机上的传输协议软件使用这一标识符决定处理这一请求的服务器程序。

 

九、端口

       1、端口就是运输层服务访问点TSAP

2、端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。

3、从这个意义上讲,端口是用来标志应用层的进程。

4、端口用一个16 bit端口号进行标志。

5、端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。

 

十、两类端口

1、一类是熟知端口,其数值一般为 0~1023。当一种新的应用程序出现时,必须为它指派一个熟知端口。

2、另一类则是一般端口,用来随时分配给请求通信的客户进程。

 

十一、并发性—客户-服务器交互模型的基础

1、并发服务器可以同时为多个客户提供服务,并不需要每个客户等待前一个客户的请求完成。

2、大多数并发服务器都是动态操作的。即只有当请求到达时,服务器才会动态地为到来的请求创建一个新的线程。

3、服务器程序由两部分组成:主线程和服务线程。

1)主线程:负责接收请求并为请求创建一个服务线程来处理请求。并使服务器保持活跃状态,主线程在创建处理请求的服务线程之后,会等待另一个请求的到来。

       2)服务线程:负责处理每个请求,然后终止。

如果N个客户同时请求一台计算机上的给定服务,则会有N+1个线程提供服务。主线程等待额外的请求,N个服务线程与每个客户进行交互。

 

十二、C/S模式的传输机制

1、面向连接传输:使用面向连接的传输协议时,两个应用必须首先建立一个连接,然后在该连接上发送数据。

2、无连接传输:应用可以利用无连接接口在任何时间向任何目的发送消息。

3、客户和服务器在通信时,既可以使用面向连接传输协议,又可以使用无连接传输协议。当使用面向连接传输时,客户需要首先形成一个到特定服务器的连接,该连接在客户发送请求和接收响应的过程中保持不变。当客户完成对服务的使用时,必须关闭这一连接。

 

十三、C/S模式的发展

       第一代C/S系统:基于两层结构的,第一层是客户端软件,由应用程序和相应的数据库连接程序组成。企业的业务过程都在程序中表现;第二层结合了数据库服务器,根据客户软件的请求进行数据库操作,然后将结构传送给客户软件。

      

       第一代C/S系统缺点

1、两层应用软件的开发工作主要集中在客户软件上,客户软件不但要完成用户界面和数据显示的工作,还要完成对商业和应用逻辑的处理工作。

2、这种两层结构仅在各自的客户机和服务器计算机之间使用,分割了界面和商业逻辑,使得客户机要管理复杂的软件,导致“肥胖”客户机的产生。

3、同时,两层结构不能进行有效的扩展,不能支持大量用户的访问和高容量事务处理的应用。

 

第二代C/S系统:三层C/S系统。

 

1、这种结构从客户机上取消了商业和应用逻辑,将它们移到中间层,即应用服务器上。

2、客户机上只需安装具有用户界面和简单的数据处理功能的应用程序。它负责处理与用户的交互和与应用服务器的交互。

3、应用服务器负责处理商业和应用逻辑,具体地说就是接受客户端应用程序的请求,然后根据商业和应用逻辑将这个请求转化为数据库请求后与数据库服务器交互,并将与数据库务器交互结果传送给客户端应用程序。

4、数据库服务器软件根据应用服务器发送的请求进行数据库操作,并将操作的结果传送给应用服务器。

三层C/S模式比两层C/S模式的优点在于

1、整个系统被分成不同的逻辑块,层次非常清晰,一层的改动不会影响其他层次;

2、能够使“肥胖”的客户机变得较“瘦”一些;

3、开发和管理工作向服务器端转移,使分布的数据处理成为可能;

4、管理和维护变得相对简单。

 

B/S模式

随着WebInternet计算环境的发展,盛行一种以Web技术为中心的应用:B/S结构

             

客户机上只安装一个浏览器,中间层采用Web服务器,它接受客户端的请求,将其转换为SQL语句,通过ODBC或其他手段传给数据库服务器,并将数据库服务器返回的结果用HTML文件格式传回给客户软件。客户实际上就是一个将标准语言转化为界面的解释器。应用程序安装在Web服务器上,其运行也是在这里进行的。

       BS模式的有点

       1、低成本,易维护的通用客户机(浏览器);

2、开放的、基于标准的解决方案;

3、强有力的、多媒体的、交互式的信息发布。

 

第二部分:应用编程接口API

一、套接字接口(Socket API

APIApplication Program interface:应用程序接口,是应用与传输协议软件进行交互时使用的接口。API定义了一套操作,应用在于协议软件交互时可以执行这些操作。

套接字API:是应用程序与TCP/IP协议之间的接口。这个接口是用于通信协议的几种应用编程接口(API)之一。API作为一种通用的通信编程接口而设计。虽然它还没有得到标准化,但是它实际上已经成为工业标准。

套接字库:就是过程库,每个过程对应着一个套接字,两者使用相同的名字和参数。

 

二、套接字库的实现

套接字库的实现与操作系统提供的本地套接字API的实现完全不同:

与作为操作系统一部分的本地套接字例程不同,套接字库过程的代码与应用程序连接,并驻留在应用程序地址空间。当应用从套接字库中调用过程时,控制转向库例程,这些库例程反过来调用一个或多个底层的操作系统功能来完成所需的操作。

 

三、实现套接字API的过程

Socket过程  该过程创建一个套接字并返回一个整数描述字。    

descriptor=socket( protofamily, type, protocol)

Close过程  该过程告诉系统终止对套接字的使用。

close( socket)

Bind过程  服务器使用该过程来提供服务器所使用的、用于等待连接的协议端口号。

bind( socket, localaddr, addrlen)

Listen过程  服务器调用该过程来等待来自客户的连接。

listen( socket, queuesize)

Accept过程  面向连接的服务器必须调用accept过程才能接收下一个连接请求。

newsock=accept( socket, caddress, caddresslen)

Connect过程  客户调用该过程建立与特定服务器之间的连接。

connect( socket, saddress, saddresslen)

Send过程  如果套接字被连接,可以利用该过程发送数据。

send( socket, data, length, flags)

Sendto过程和Sendmsg 过程  允许客户或服务器使用无连接套接字发送数据。

sendto( socket, data, length, flags, destaddress, addresslen)

sendmsg( socket, msgstruct, flags)msgstruct是一个结构,该结构包含了关于目的地址,目的地址的长度,发送的消息,以及消息的长度等信息。

Recv过程  应用可以调用该过程从连接套接字中接收数据。

recv( socket, buffer, length, flags)

Recvfrom过程和Recvmsg过程 如果套接字并没有被连接,应用可以用于接收来自任意发送者的消息

recvfrom( socket, buffer, length, flags, sndraddr, saddrlen)

recvmsg( socket, msgstruct, flags)msgstruct是一个结构,该结构含有接收消息的地址和发送者的IP地址。

 

四、面向连接模式下使用的系统调用与无连接模式下使用的系统调用

类型

建立

发送

接收

面向连接的服务器

bind,listen或者accept

write或者send

read或者recv

面向连接的客户

connect

write或者send

read或者recv

无连接的服务器

bind

sendto或者sendmsg

recvfrom或者recvmsg

无连接的客户

bind

sendto或者sendmsg

recvfrom或者recvmsg

 

五、其他套接字过程

       Getpeername过程:服务器在调用accept过程接收连接请求之后,可以调用该过程,以获得启动连接的远程客户的完整地址。

Gethostname过程:客户或服务器可以调用该过程来获取运行该程序的计算机的信息。

Gethostbyname过程:通过计算机名字返回该计算机的IP地址。客户经常使用该过程将用户输入的名字转换成相应的协议软件所需的IP地址。

Gethpostbyaddr过程:给出一台计算机的IP地址,它将返回该计算机的名字。当要向人们线时主机信息时,客户或服务器就可以使用该过程。

 

六、客户-服务器模式的socket实现框架

      

 

      

 

第三部分:简单例子的API实例

客户建立一个与服务器的连接,然后等待输出。当一个连接请求到达时,服务器创建一条ASCII文本消息,记录访问它的客户的数目,然后通过连接发送这一消息,最后关闭连接。客户显示接收的数据,然后退出。

如果一个客户向该服务器连接了10次,则客户接到并打印的信息为:

This server has been contacted 10 times.

       该实例套接字过程调用顺序

      

 

官方博文地址:http://www.17core.com/blog/html/201103/235.html