计算机通信与实验(2)_第1页
计算机通信与实验(2)_第2页
计算机通信与实验(2)_第3页
计算机通信与实验(2)_第4页
计算机通信与实验(2)_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章 基本网络开发技术 2 7.1 网络应用开发的基础知识 7.2 C/S编程模式和套接字 7.3 B/S编程模式及相关技术 习 题 基本网络开发技术3网络应用开发的基础知识网络应用开发的基础知识7.1.1服务器和客户的概念7.1.2标示网络应用网络应用的定位地址7.1.3两类不同的编程模式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模式,。 8C/S编程模式和套接字 7.2.1 C/S编程模式 7.2.2 套接字接口 7.2.3 实现套接字API的过程 7.2.4 套接字API的应用示例9C/S编程模式对于一个服务

4、器程序而言,在同一时刻可能有多个客户来请求服务,这时有两种方案: 方案1: 很自然可以想到,下一个客户获得服务必须等待前一个客户服务结束,以文件传输服务为例,如果用户请求的文件很小,服务器在用户不能觉察的时间内就可以完成服务,方案1可以很好工作。但如果用户请求的文件很大,大到服务器需要几分钟、几十分钟甚至更长的时间才能完成服务,对排队等候的用户而言可能就无法忍受了。 方案2: 显然是更理想的方式,这时因为有多个客户,需要多个(同样种)服务器提供服务,也就是在运行服务器的计算机上必须同时运行多个服务器应用,这就是并发。并发需要操作系统的支持,今天的操作系统都能满足。再拿文件服务来举例,虽然只有一

5、个文件服务的服务器应用程序,但同一时刻计算机把它运行了多次,每一个运行着的服务器为一个客户提供客户需要的文件服务。一个运行着的服务器可以称为服务器的一个控制线程。动态创建: 也就是服务器在每个请求到来时创建一个新的控制线程来提供服务,它与已有的控制线程并发工作。10C/S编程模式 一个服务器应用程序由两部分组成:一部分负责接收请求和生成新控制线程,另一部分包含处理单个请求完成服务的代码。 在服务器程序设计时,必须考虑到并发的情况,并通过动态创建来解决这个问题。11C/S编程模式 服务器同时又多个控制线程工作,客户如何找到属于自己的线程并与它交互呢? 拿TCP来说,客户的请求中包含了:目的IP,

6、目的TCP端口号,源IP,源TCP端口号,目的IP帮助客户找到正确的提供服务的计算机,目的TCP端口号为客户在目的计算机上的不同类型服务器中找到正确的服务器程序,而源IP和源TCP端口号则成为为这个客户启动的控制线程的标识,服务器通过它们使正确的控制线程与正确的客户交互。12套接字接口 套接字是从英文单词socket翻译而来,它是网络通信的基本构件。 可以把套接字想象成连接应用和底层网络实现的“门”,发送信息的一方把信息送出 “门”,底层的网络实现保证信息正确无误地到达接收发的“门”口供接收. 套接字是网络传输资源的描述符(指针)。 套接字最早是U.C. Berkeley大学BSD UNIX系

7、统中的一部分13以Windows Sockets为例来看看应用程序与socket之间的关系,如下图:套接字接口141Socket过程2Close过程3Bind过程4Listen过程5Accept过程6Connect过程7Send、Sendto与Sendmsg过程8Recv、Recvfrom与Recvmsg过程9辅助过程实现套接字API的过程15实现套接字API的过程 下图给出了最简单的服务器和客户套接字API过程。16 1Socket过程 Socket过程创建一个套接字,返回一个整型描述符:descriptor = socket(protocolfamilY, type, protocol)参

8、数protocolfamily表示:套接字使用的协议簇。例如,值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, addrle

10、n) 参数socket是一个套接字的描述符 参数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地址)。最后,

11、sa_data域包含地址。每个协议簇为sockaddr结构中的sa_data域定义自己的精确格式。实现套接字API的过程203Bind过程 例如, 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结构的前两个域正好对应一般的sockadd

12、r结构的前两个域,后三个域定义了TCP/IP协议所希望的确切地址格式。实现套接字API的过程21 3Bind过程有两点值得注意: 第一,每个地址标识了一台计算机以及该计算机上的一个特定应用。sin_addr域包含这台计算机的IP地址,而sin_port域包含这个应用的协议端口号。 第二,尽管TCP/IP只需要六个字节来存放整个地址,一般的sockaddr结构仍保留了十四字节。于是,最终的sockaddr_in结构中包含一个8个字节的全0的域,以使该结构在大小上与sockaddr相同。除了协议端口号外,sockaddr_in结构还包含一个记录IP地址的域。sockaddr_in结构定义了TCP/

13、IP使用的地址表示格式。尽管该结构包含了IP地址的域和协议端口号的域,套接字API仍包含了一个字符常量来允许服务器对该计算机上的任一IP地址指定一个协议端口。实现套接字API的过程22 4Listen过程 在说明了一个协议端口后,服务器必须通知操作系统将这个套接字设为被动模式以使它能被用来等待客户的通信。为了做到这一点,服务器调用listen过程,它有两个参数: listen(socket, queuesize) 参数socket是套接字的描述符,它已经被创建并绑定于一个本地地址。 参数queuesize表示该套接字的请求队列的长度。 实现套接字API的过程23 5Accept过程 连接传输协

14、议的服务器必须调用accept过程来接受下一个连接请求。如果队列中已经有请求, accept立即返回;如果还没有请求到达,系统挂起服务器直至有客户建立连接。 accept调用的形式为: newsock = accept(socket, caddress, caddresslen) 参数socket是服务器已经创建并绑定于指定协议端口的套接字的描述符。 参数caddress是sockaddr类型结构的地址,而caddresslen则是一个指向整型的指针。accept在参数caddress的域中填入建立连接的客户的地址,并设caddresslen为地址长度。实现套接字API的过程24 6Conne

15、ct过程 客户使用connect过程与指定服务器建立连接。形式为: connect(socket, saddress, saddresslen) 参数socket是客户端计算机上用于该连接的套接字的描述符。 参数saddress是一个sockaddr结构,说明服务器地址与协议端口号( IP地址和协议端口号合在一起有时被称作端地址,即endpoint address)。 参数saddresslen是以字节形式说明的服务器地址的长度。当使用TCP这样的面向连接的传输协议时,connect启动一个指定服务器的传输层连接。一般来说,connect是客户用来与已经调用了accept的服务器进行连接的过程

16、。实现套接字API的过程25 7Send、Sendto与Sendmsg过程 客户与服务器都需要发送信息。通常客户发送请求,服务器发送应答。如果套接字已连接,send过程可用来传输数据。send有四个参数: send(socket, data, length, flag) 参数socket是使用的套接字的描述符。 参数data是待发送数据在内存中的地址。 参数length是一个整型数,表示数据的字节数,而参数flag则包含了请求特殊选项的位(许多选项是为系统调试设计的,并不能被普通的客户和服务器程序使用)。实现套接字API的过程26 7Send、Sendto与Sendmsg过程 Sendto与S

17、endmsg过程允许客户或服务器使用一个未连接的套接字发送信息,两者都需要调用者说明目的地。Sendto将目的地地址作为参数。它的形式为: sendto(socket, data, length, flag, destaddress, addresslen) 前四个参数对应于send过程的四个参数。 后两个参数说明目的地地址与该地址的长度。 参数destaddress的类型为sockaddr结构(特别地,在TCP/IP中为sockaddr_in结构)。实现套接字API的过程27 7Send、Sendto与Sendmsg过程 Sendmsg过程完成与Sendto过程相同的操作,但通过定义结构简化

18、了参数。这种较短的参数表使使用Sendmsg的程序更易读: sendmsg(socket, msgstruct, flag) 参数msgstruct是一个包括关于目的地地址、该地址长度、待发送信息及该信息长度等内容的结构: struct msgstruct /*sendmsg 使用的结构*/ struct sockaddr *m_saddr;/*目的地地址指针*/ struct datavec *m_dvec;/*信息(向量)指针*/ int m_dvlength; /*向量中项数*/ struct access *m_rights;/*访问权表指针*/ int m_alength;/*表中项

19、数*/ ; 大多数应用仅仅使用前三个域,说明目的地协议地址和一列组成该信息的数据项。实现套接字API的过程28 8Recv、Recvfrom与Recvmsg过程 客户与服务器都需要接收发自另一方的数据。套接字API提供了一些可用的过程。例如,一个应用可以调用recv从一个连接的套接字接收数据。这个过程的形式为: recv(socket, buffer, length, flags) 参数socket是从中接收数据的套接字的描述符。 参数buffer表示用来存放接收到的数据的内存地址。 参数length则表示这个缓冲区的大小。 参数flag允许调用者控制一些细节(例如,允许应用在不将信息从套接字

20、中移出的情况下提取它的一个副本等)。实现套接字API的过程29 8Recv、Recvfrom与Recvmsg过程 如果一个套接字未连接,它可被用来接收从任意一组客户发来的信息。在这种情况下,系统返回每个接收到的信息和发送方地址。应用使用Recvfrom过程接收信息及发送方地址: recvfrom(socket, buffer, length, flags, sndraddr, saddrlen) 前四个参数对应于recv过程的参数,剩下的两个参数sndraddr和saddrlen用来记录发送方的IP地址。 参数sndraddr是sockaddr结构的指针,系统将发送方地址写入其中 参数sadd

21、rlen是一个整型的指针,系统用它来记录地址的长度。Recvfrom记录的发送方地址与sendto所期望的完全相同。 如果一个应用使用Recvfrom来接收一个信息,发送一个回答将是十分容易的应用只需简单地在回答中将记录的地址作为目的地即可。实现套接字API的过程30 8Recv、Recvfrom与Recvmsg过程 套接字API包含了一个与sendmsg输出过程相似的输入过程。Recvmsg过程所做的操作类似于Recvfrom,但需要较少的参数。它的形式为: recvmsg(socket, msgstruct, flags) 参数m sgstruct给出了一个结构的地址,这个结构包含了接收到

22、的信息的地址与发送方的IP地址。 Recvmsg所记录的结构的格式与sendmsg所要求的完全一样。 这样,这两个过程在接收信息与发送应答时能很好地配合。实现套接字API的过程31实现套接字API的过程 9辅助过程 服务器在调用accept过程接收连接请求之后,它可以调用getpeername过程来获得启动连接的客户的完整地址。 应用程序可以调用setsockopt过程存储套接字选项, getsockopt获得当前选项值。选项主要用来处理特殊情况(例如,通过改变协议软件使用的内部缓冲区大小来提高性能等)。 有两个过程可用来在I P地址和计算机名之间进行转换。 gethostbyname过程通过

23、计算机名字返回该计算机的IP地址。客户经常使用gethostbyname将用户输入的名字转换成相应的协议软件所需的IP地址。 gethostbyaddr提供一个反向的映射给出一台计算机的IP地址,它将返回该计算机的名字。客户与服务器可以在向人显示信息时使用gethostbyaddr。32套接字API的应用示例 这个例子包含服务器和客户两个部分,服务器打开一个TCP端口,绑定到本地地址上去,等待客户的连接,客户的连接被服务器接受后,服务器发送信息到客户并关闭这次连接、等待下一个客户的连接。客户接收到信息后,显示在终端上,结束客户程序。2服务器代码服务器代码/*server.c-使用TCP的服务器

24、程序实例代码*/#ifndefWIN32#defineclosesocketclose#include#include#include#include.详细1客户代码客户代码/*client.c-使用TCP的客户程序实例代码*/#ifndefWIN32#defineclosesocketclose#include#include.详细33B/S编程模式及相关技术 7.3.1 Web基础知识 7.3.2 MVC思想和在Web开发中的使用 7.3.3 Web编程语言中的通用概念 7.3.4 Web编程的例子34Web基础知识 1统一资源定位器 2Web服务器与浏览器 3理解HTTP 4 HTML3

25、5统一资源定位器 URL可以分为以下几部分: Protocol:/(协议) Servername.domain(服务器名.域) directory/(目录) file(文件)36统一资源定位器 其他常见的URL为: ftp:/服务器域名/目录/文件。 ftp:/用户名服务器域名/目录/文件。 telnet:/服务器域名。 news:/新闻服务器域名/新闻组。37用户可以使用URL向服务器传递数据。典型应用为向服务器方函数传递参数。例如:http:/服务器域名/目录/文件/file.html?用户名Jamison&uid=300此URL向file.html主页传递一对参数:用户名Jamison和

26、UID300。有时,需要在URL中包含特殊字符如空隔或斜杠(/)。这些特殊字符必须重新编码以避免服务器出现问题。编码过程(有时指16进制编码)包括将特殊字符用其16进制的数取代。 例如:假设用户需要在URL中列出用户全名:http:/服务器域名/目录/file.html?用户名Neal%20Jamison在示例中,Neal和Jaminson间的空隔由与空隔等价的16进制的数取代。统一资源定位器38Web服务器与浏览器Web服务器是Web的内容提供者。它响应客户端请求,并向客户端提供某种形式的数据。这些数据采用超文本标记语言(HTML)。Web浏览器是Web的客户端。浏览器包括与Web服务器建立

27、通信所需的软件及转换,并显示从服务器方返回数据的软件。常见的Web服务器有:Apache HTTP Server (/)Microsoft Internet Information Server (IIS, http:/ Internet Explorer ( Firefox (http:/ Browser (http:/ Web Browser (http:/ 80端口。客户/服务器传输过程可分为四个基本步骤:1)浏览器与服务器建立连接;2)浏览器向服务器请求文档;3)服务器响应浏览器请求;4)断开连接。HTTP是一种无状态协议,它不维护连接的状态

28、信息。40理解HTTP为了使服务器与客户端通信成为可能,HTTP协议建立了一种由请求和响应消息组成的Web语言。客户请求包含以下信息:请求方法请求头请求数据请求方法是用于特定URL或Web页面的程序。41理解HTTP常用的请求方法有:GET请求指定的文档HEAD仅请求文档头POST请求服务器接收指定文档作为可执行的信息头信息是可选项,它用于向服务器提供客户端的其他信息。如:Accept客户端接收的数据类型User-Agent 客户方软件类型Authorization认证消息,包括用户名和口令Referer引用当前请求的Web页面42理解HTTP如果客户采用某种方法获取数据(如POST),数据就

29、放在头(header)之后;否则客户机等待从服务器传来的响应。服务器响应包括以下关键部分:状态码响应头响应数据43理解HTTPHTTP定义了多组返回给浏览器的状态码。状态码是三位十进制数,状态码的最高位表明状态码的类别,常见的有以下类别: 2xx成功,如200表示请求成功等3xx重定向,如302暂时转移等4xx客户方错误,如403表示用户权限不够、404表示文件未找到等5xx服务器错误,如500表示服务器内部错误等响应头向客户方提供服务器和/或请求文档的信息。所有的头均以空行结束。常用相应头有: ServerWeb服务器信息Date当前日期/时间LastModified请求文档最近修改时间Ex

30、pires 请求文档过期时间Content-length 数据长度(字节)Content-type数据MIME类型44HTML 超文本标记语言是所有浏览器都可以理解的标准语言。它是一组标明Web页面内容的标记组成。 HTML与平台无关,因此,可以高效地从一个计算机环境传输到另一个计算机环境。45HTMLHTML使用标记指明信息的表现形式,标记的语法格式如下:信息 类型开始于结束于,并且标记可以嵌套。46HTMLHTML Web页面包含三个部分:以表示HTML文件的开始,表示HTML文件的结束;和包围的部分是HTML文件的头部,包含一些控制信息;和包含的是主体部分,是直接显示的正文部分。基本结构

31、如下: Sample PageHello World!学习HTML就是学习标记的用法,常用的有:表示段落表示换行表示超链接表示图片47MVC思想和在Web开发中的使用MVC最初是在Smalltalk-80中被用来构建用户界面的。M代表模型Model, V代表视图 View, C代表控制器Controller。MVC的目的是增加代码的重用率,减少数据表达,数据描述和应用操作的耦合度。 48MVC思想和在Web开发中的使用MVC关系图49MVC思想和在Web开发中的使用把这种思想拿到Web开发中来,可以把Web的开发放到三个不同层次上去看:呈现层(Presentation Layer) 用户UI,

32、其实就是HTML、Javascript等的用户界面商业逻辑层(Business Logic Layer) 处理用户请求,对用户输入的信息按照商业逻辑的要求进行处理,并把处理的结果交由呈现层返回给用户。一般使用ASP、PHP、Perl、Java等语言进行处理数据层(Data Layer) 对信息的抽象、描述和存储,一般指存储信息的数据库系统、文件系统等50MVC思想和在Web开发中的使用3层Web应用:51Web编程语言中的通用概念1Request2Response3Application/Context4Session5Server /System52Web编程语言中的通用概念 1.Reque

33、st Request对象/数组包含了一次HTTP请求的所有信息,包括浏览器的请求方法(Method)、请求URL、请求头信息、请求数据等信息,程序设计者可以通过它从呈现层获取用户数据。如在ASP中可以通过Request对象获取通过Web表单(Form)提交过来的信息: Request.form(”userName”) 实现同样的功能,在JSP里要这样来写: request.getParameter(”userName”);53Web编程语言中的通用概念 2Response 与Request对应,Response则包含了一次HTTP相应的所有信息,如把HTML发送给浏览器、重定向用户请求等。,如

34、在ASP中可以这样把一个信息发送给浏览器: 在JSP里Response的输出必须用out来写,所以上面的语法到JSP里为: 54Web编程语言中的通用概念 3. Application/Context Application常常指一次Web服务器的启动环境,包含了与这一次启动有关的任何数据,它为所有在这次启动中的客户所共有。如一个很简单的聊天程序用ASP来实现可以这样来写,一个用户使用以下语句把信息写入Application: Application(”chatinfo”) = ”Hello everybody!” 其他用户可以简单地通过引用Application(“chatinfo”),就可以取到这条信息: Response.write Application(”chatinfo”) 55Web编程语言中的通用概念 4. Session Web编程语言使用Ses

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论