资源预览内容
第1页 / 共61页
第2页 / 共61页
第3页 / 共61页
第4页 / 共61页
第5页 / 共61页
第6页 / 共61页
第7页 / 共61页
第8页 / 共61页
第9页 / 共61页
第10页 / 共61页
亲,该文档总共61页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第七章第七章 基本网基本网络开发技术络开发技术 1n n7.1 网络应用开发的基础知识n n7.2 C/S编程模式和套接字n n7.3 B/S编程模式及相关技术n n7. 4 习 题 基本网络开发技术基本网络开发技术2网络应用开发的基础知识网络应用开发的基础知识n n7. 1 网络应用开发的基础知识n n服务器和客户的概念服务器和客户的概念n n标示网络应用标示网络应用网络应用的定位地址网络应用的定位地址n n两类不同的编程模式两类不同的编程模式3服务器和客户的概念服务器和客户的概念n n一般地,把那些提供网络服务的应用程序称为服务器程序一般地,把那些提供网络服务的应用程序称为服务器程序(也可简称为服务器),接受网络服务的应用程序称为客(也可简称为服务器),接受网络服务的应用程序称为客户程序(也可简称为客户),它们之间的通信交换称为客户程序(也可简称为客户),它们之间的通信交换称为客户服务器交互模式(户服务器交互模式(Client-serverParadigmofClient-serverParadigmofInteractionInteraction),简称),简称C/SC/S模式,或模式,或C/SC/S结构。结构。n n通常地,这个术语指一个被动地等待通信的、能够提供某通常地,这个术语指一个被动地等待通信的、能够提供某种网络服务的程序,而不是运行它的计算机。然而,当一种网络服务的程序,而不是运行它的计算机。然而,当一台计算机被用来运行一个或几个服务器程序时,这台计算台计算机被用来运行一个或几个服务器程序时,这台计算机本身有时也被称作服务器。机本身有时也被称作服务器。n n准确地说,服务器(准确地说,服务器( ServerServer)这个术语来指那些运行的程)这个术语来指那些运行的程序而不是计算机。序而不是计算机。4标示网络应用标示网络应用网络应用的网络应用的定位地址定位地址n n应用的网络定位地址=计算机的计算机的IPIP地址地址 +应用对应的应用对应的TCP/UDPTCP/UDP端口号端口号5标示网络应用标示网络应用网络应用的网络应用的定位地址定位地址n n常见应用服务的端口服服服服务务内容内容内容内容应应用用用用协议协议端口端口端口端口类别类别端口号端口号端口号端口号WebWeb浏览浏览HTTPHTTPTCPTCP8080发发送送邮邮件件SMTPSMTPTCPTCP2525接收接收邮邮件件POP3POP3TCPTCP110110文件文件传输传输FTPFTPTCPTCP2020,21216两类不同的编程模式两类不同的编程模式n nC/SC/S模式模式n n绝大部分的网络应用程序从根本上而言都是绝大部分的网络应用程序从根本上而言都是C/SC/S模式模式. .n nC/SC/S模式下,一个应用通常包含了两部分程序:服务器程序和客户模式下,一个应用通常包含了两部分程序:服务器程序和客户程序,它们需要分别安装、设置。对于普通的计算机用户而言,程序,它们需要分别安装、设置。对于普通的计算机用户而言,为了获取网络服务就必须安装和设置特定的客户程序,未免要求为了获取网络服务就必须安装和设置特定的客户程序,未免要求过高。过高。n nB/SB/S模式模式n n客户机统一,浏览器(客户机统一,浏览器(BrowserBrowser)成为通用的客户端,网络开发只)成为通用的客户端,网络开发只需要开发服务器端,用户计算机上也不需要为每一个网络应用各需要开发服务器端,用户计算机上也不需要为每一个网络应用各安装、设置一个客户端软件,大大简化了网络应用的开发和部署。安装、设置一个客户端软件,大大简化了网络应用的开发和部署。这种更为便利的开发方式逐步流行,称之为浏览器这种更为便利的开发方式逐步流行,称之为浏览器/ /服务器交互模服务器交互模式(式(Browser-serverParadigmofInteractionBrowser-serverParadigmofInteraction),简称),简称B/SB/S模式,。模式,。 7C/SC/S编程模式和套接字编程模式和套接字n n7.2.1 C/S7.2.1 C/S编程模式编程模式n n7.2.2 7.2.2 套接字接口套接字接口n n7.2.3 7.2.3 实现套接字实现套接字APIAPI的过程的过程n n7.2.4 7.2.4 套接字套接字APIAPI的应用示例的应用示例8C/SC/S编程模式编程模式n n对于一个服务器程序而言,在同一时刻可能有多个客户来请求服务,对于一个服务器程序而言,在同一时刻可能有多个客户来请求服务,这时有两种方案:这时有两种方案:n n方案方案1:1:很自然可以想到,下一个客户获得服务必须等待前一个客户服务很自然可以想到,下一个客户获得服务必须等待前一个客户服务结束,以文件传输服务为例,如果用户请求的文件很小,服务器在用户结束,以文件传输服务为例,如果用户请求的文件很小,服务器在用户不能觉察的时间内就可以完成服务,方案不能觉察的时间内就可以完成服务,方案1 1可以很好工作。但如果用户请可以很好工作。但如果用户请求的文件很大,大到服务器需要几分钟、几十分钟甚至更长的时间才能求的文件很大,大到服务器需要几分钟、几十分钟甚至更长的时间才能完成服务,对排队等候的用户而言可能就无法忍受了。完成服务,对排队等候的用户而言可能就无法忍受了。n n方案方案2:2:显然是更理想的方式,这时因为有多个客户,需要多个(同样种)显然是更理想的方式,这时因为有多个客户,需要多个(同样种)服务器提供服务,也就是在运行服务器的计算机上必须同时运行多个服服务器提供服务,也就是在运行服务器的计算机上必须同时运行多个服务器应用,这就是并发。并发需要操作系统的支持,今天的操作系统都务器应用,这就是并发。并发需要操作系统的支持,今天的操作系统都能满足。再拿文件服务来举例,虽然只有一个文件服务的服务器应用程能满足。再拿文件服务来举例,虽然只有一个文件服务的服务器应用程序,但同一时刻计算机把它运行了多次,每一个运行着的服务器为一个序,但同一时刻计算机把它运行了多次,每一个运行着的服务器为一个客户提供客户需要的文件服务。一个运行着的服务器可以称为服务器的客户提供客户需要的文件服务。一个运行着的服务器可以称为服务器的一个控制线程。一个控制线程。n n动态创建动态创建: :也就是服务器在每个请求到来时创建一个新的控制线程来也就是服务器在每个请求到来时创建一个新的控制线程来提供服务,它与已有的控制线程并发工作。提供服务,它与已有的控制线程并发工作。9C/SC/S编程模式编程模式n n一个服务器应用程序由两部分组成:一部分负责接收请求一个服务器应用程序由两部分组成:一部分负责接收请求和生成新控制线程,另一部分包含处理单个请求完成服务和生成新控制线程,另一部分包含处理单个请求完成服务的代码。的代码。n n在服务器程序设计时,必须考虑到并发的情况,并通过动在服务器程序设计时,必须考虑到并发的情况,并通过动态创建来解决这个问题。态创建来解决这个问题。10C/SC/S编程模式编程模式n n服务器同时又多个控制线程工作,客户如何找到属于自己服务器同时又多个控制线程工作,客户如何找到属于自己的线程并与它交互呢?的线程并与它交互呢?n n拿拿TCPTCP来说,客户的请求中包含了:目的来说,客户的请求中包含了:目的IPIP,目的,目的TCPTCP端口号,端口号,源源IPIP,源,源TCPTCP端口号,目的端口号,目的IPIP帮助客户找到正确的提供服务的计帮助客户找到正确的提供服务的计算机,目的算机,目的TCPTCP端口号为客户在目的计算机上的不同类型服务器端口号为客户在目的计算机上的不同类型服务器中找到正确的服务器程序,而源中找到正确的服务器程序,而源IPIP和源和源TCPTCP端口号则成为为这个端口号则成为为这个客户启动的控制线程的标识,服务器通过它们使正确的控制线程客户启动的控制线程的标识,服务器通过它们使正确的控制线程与正确的客户交互。与正确的客户交互。11套接字接口套接字接口n n套接字是从英文单词套接字是从英文单词socketsocket翻译而来,它是网络通信的翻译而来,它是网络通信的基本构件。基本构件。n n可以把套接字想象成连接应用和底层网络实现的可以把套接字想象成连接应用和底层网络实现的“门门”,发送信息的一方把信息送出,发送信息的一方把信息送出“门门”,底层的网络实现,底层的网络实现保证信息正确无误地到达接收发的保证信息正确无误地到达接收发的“门门”口供接收口供接收. .n n套接字是网络传输资源的描述符(指针)。套接字是网络传输资源的描述符(指针)。n n套接字最早是套接字最早是U.C.BerkeleyU.C.Berkeley大学大学BSDUNIXBSDUNIX系统中的一系统中的一部分部分12n n以以WindowsSocketsWindowsSockets为例来看看应用程序与为例来看看应用程序与socketsocket之间的关系,如之间的关系,如下图:下图:套接字接口套接字接口131 1SocketSocket过程过程2 2CloseClose过程过程3 3BindBind过程过程4 4ListenListen过程过程5 5AcceptAccept过程过程6 6ConnectConnect过程过程7 7SendSend、SendtoSendto与与SendmsgSendmsg过程过程8 8RecvRecv、RecvfromRecvfrom与与RecvmsgRecvmsg过程过程9 9辅助过程辅助过程实现套接字实现套接字APIAPI的过程的过程14实现套接字实现套接字APIAPI的过程的过程n n下图给出了最简单的服务器和客户套接字下图给出了最简单的服务器和客户套接字APIAPI过程。过程。15n n1 1SocketSocket过程过程n nSocketSocket过程创建一个套接字,返回一个整型描述符:过程创建一个套接字,返回一个整型描述符:descriptor=socket(protocolfamilY,type,protocol)descriptor=socket(protocolfamilY,type,protocol)参数参数protocolfamilyprotocolfamily表示:套接字使用的协议簇。例如,值表示:套接字使用的协议簇。例如,值PF_INETPF_INET表示表示TCP/IPTCP/IP协议系列。协议系列。参数参数typetype表示:套接字所使用通信的类型。两个最常用的类型是面表示:套接字所使用通信的类型。两个最常用的类型是面向连接的流传输(用值向连接的流传输(用值SOCK_STREAMSOCK_STREAM表示)和无连接的面向表示)和无连接的面向消息传输(用值消息传输(用值SOCK_DGRAMSOCK_DGRAM表示)。表示)。参数参数protocolprotocol:表示套接字所使用的特定传输协议。在:表示套接字所使用的特定传输协议。在typetype参数后加参数后加上上protocolprotocol参数允许单个协议系列包括两个或多个提供同一个服参数允许单个协议系列包括两个或多个提供同一个服务的协议。当然,务的协议。当然, protocolprotocol参数所能取的值取决于协议簇。例如,参数所能取的值取决于协议簇。例如,TCP/IPTCP/IP协议系列包含了协议系列包含了TCPTCP协议,而其他的系列并不包含。协议,而其他的系列并不包含。实现套接字实现套接字APIAPI的过程的过程16n n2 2CloseClose过程过程n ncloseclose过程告诉系统终止对一个套接字的使用过程告诉系统终止对一个套接字的使用(WindowsWindows的套接字接口用的套接字接口用closesocketclosesocket而不是而不是closeclose)。它的形式为:)。它的形式为:close(socket)close(socket)n n其中其中socketsocket是要关闭的套接字的描述符。如果该套是要关闭的套接字的描述符。如果该套接字使用的是面向连接的传输协议,接字使用的是面向连接的传输协议,closeclose在关闭套在关闭套接字前先终止连接。关闭一个套接字意味着立即终接字前先终止连接。关闭一个套接字意味着立即终止对它的使用止对它的使用描述符被释放,以防止应用程序发描述符被释放,以防止应用程序发送更多的数据;传输协议也停止接收指向该套接字送更多的数据;传输协议也停止接收指向该套接字的信息,以防止应用程序接收更多的数据。的信息,以防止应用程序接收更多的数据。实现套接字实现套接字APIAPI的过程的过程17n n3 3BindBind过程过程n n服务器使用服务器使用bindbind过程提供一个协议端口号,并通过过程提供一个协议端口号,并通过它等待通信。它等待通信。n nbindbind有三个参数:有三个参数:bind(socket,localaddr,addrlen)bind(socket,localaddr,addrlen)n n参数参数socketsocket是一个套接字的描述符是一个套接字的描述符n n参数参数localaddrlocaladdr是一个结构,是一个结构,n n参数参数addrlenaddrlen是一个整数,指出地址的长度。是一个整数,指出地址的长度。实现套接字实现套接字APIAPI的过程的过程18n n33BindBind过程过程这个表示地址的一般格式被定义为一个这个表示地址的一般格式被定义为一个sockaddrsockaddr结构。结构。它已经推出了许多版本,最近的伯克利代码定义的它已经推出了许多版本,最近的伯克利代码定义的sockaddrsockaddr结构包含三结构包含三个域:个域:structsockaddrstructsockaddru_charsa_len;u_charsa_len;/* /*地址总长地址总长* */ /u_charsa_family;u_charsa_family;/* /*地址簇地址簇* */ /charsa_data14;charsa_data14;/* /*地址本身地址本身* */ /; ;sa_lensa_len域表示地址长度。域表示地址长度。sa_familysa_family域表示地址所属的协议簇(字符常量域表示地址所属的协议簇(字符常量AF_INETAF_INET表示表示TCP/IPTCP/IP地地址)。址)。最后,最后,sa_datasa_data域包含地址。域包含地址。每个协议簇为每个协议簇为sockaddrsockaddr结构中的结构中的sa_datasa_data域定义自己的精确格式。域定义自己的精确格式。实现套接字实现套接字APIAPI的过程的过程19n n3 3BindBind过程过程例如,例如, TCP/IPTCP/IP协议使用协议使用sosockaddr_inckaddr_in来定义地址:来定义地址:structsockaddr_instructsockaddr_in u_charsin_len;u_charsin_len;/* /*地址总长地址总长* */ /u_charsin_family;u_charsin_family;/* /*地址簇地址簇* */ /u_shortsin_port;u_shortsin_port;/* /*协议端口号协议端口号* */ /structin_addrsin_addr;/*structin_addrsin_addr;/*计算机计算机IPIP地址地址* */ /charsin_zero8;charsin_zero8; /* /*未用(置为未用(置为0 0)* */ /;n nsockaddr_insockaddr_in结构的前两个域正好对应一般的结构的前两个域正好对应一般的sockaddrsockaddr结构的前两个域,结构的前两个域,后三个域定义了后三个域定义了TCP/IPTCP/IP协议所希望的确切地址格式。协议所希望的确切地址格式。实现套接字实现套接字APIAPI的过程的过程20n n3 3BindBind过程过程n n有两点值得注意:有两点值得注意:n n第一,每个地址标识了一台计算机以及该计算机上的一个特定应用。第一,每个地址标识了一台计算机以及该计算机上的一个特定应用。sin_addrsin_addr域包含这台计算机的域包含这台计算机的IPIP地址,而地址,而sin_portsin_port域包含这个应用的域包含这个应用的协议端口号。协议端口号。n n第二,尽管第二,尽管TCP/IPTCP/IP只需要六个字节来存放整个地址,一般的只需要六个字节来存放整个地址,一般的sockaddrsockaddr结构仍保留了十四字节。于是,最终的结构仍保留了十四字节。于是,最终的sockaddr_insockaddr_in结构中结构中包含一个包含一个8 8个字节的全个字节的全0 0的域,以使该结构在大小上与的域,以使该结构在大小上与sockaddrsockaddr相同。相同。n n除了协议端口号外,除了协议端口号外,sockaddr_insockaddr_in结构还包含一个记录结构还包含一个记录IPIP地址的域。地址的域。n nsockaddr_insockaddr_in结构定义了结构定义了TCP/IPTCP/IP使用的地址表示格式。尽管该结构使用的地址表示格式。尽管该结构包含了包含了IPIP地址的域和协议端口号的域,套接字地址的域和协议端口号的域,套接字APIAPI仍包含了一个字仍包含了一个字符常量来允许服务器对该计算机上的任一符常量来允许服务器对该计算机上的任一IPIP地址指定一个协议端地址指定一个协议端口。口。实现套接字实现套接字APIAPI的过程的过程21n n4 4ListenListen过程过程在说明了一个协议端口后,服务器必须通知操作系统将这个套在说明了一个协议端口后,服务器必须通知操作系统将这个套接字设为被动模式以使它能被用来等待客户的通信。为了做到这接字设为被动模式以使它能被用来等待客户的通信。为了做到这一点,服务器调用一点,服务器调用listenlisten过程,它有两个参数:过程,它有两个参数:listen(socket,queuesize)listen(socket,queuesize)参数参数socketsocket是套接字的描述符,它已经被创建并绑定于一个本地地址。是套接字的描述符,它已经被创建并绑定于一个本地地址。参数参数queuesizequeuesize表示该套接字的请求队列的长度。表示该套接字的请求队列的长度。实现套接字实现套接字APIAPI的过程的过程22n n5 5AcceptAccept过程过程连接传输协议的服务器必须调用连接传输协议的服务器必须调用acceptaccept过程来接受下一个连接请过程来接受下一个连接请求。如果队列中已经有请求,求。如果队列中已经有请求, acceptaccept立即返回;如果还没有请求立即返回;如果还没有请求到达,系统挂起服务器直至有客户建立连接。到达,系统挂起服务器直至有客户建立连接。acceptaccept调用的形式为:调用的形式为:newsock=accept(socket,caddress,caddresslen)newsock=accept(socket,caddress,caddresslen)参数参数socketsocket是服务器已经创建并绑定于指定协议端口的套接字的描述符。是服务器已经创建并绑定于指定协议端口的套接字的描述符。参数参数caddresscaddress是是sockaddrsockaddr类型结构的地址,而类型结构的地址,而caddresslencaddresslen则是一个指则是一个指向整型的指针。向整型的指针。acceptaccept在参数在参数caddresscaddress的域中填入建立连接的客户的地址,的域中填入建立连接的客户的地址,并设并设caddresslencaddresslen为地址长度。为地址长度。实现套接字实现套接字APIAPI的过程的过程23n n6 6ConnectConnect过程过程客户使用客户使用connectconnect过程与指定服务器建立连接。形式为:过程与指定服务器建立连接。形式为:connect(socket,saddress,saddresslen)connect(socket,saddress,saddresslen)参数参数socketsocket是客户端计算机上用于该连接的套接字的描述符。是客户端计算机上用于该连接的套接字的描述符。参参数数saddresssaddress是一个是一个sockaddrsockaddr结构,说明服务器地址与协议结构,说明服务器地址与协议端口号(端口号( IPIP地址和协议端口号合在一起有时被称作端地址,即地址和协议端口号合在一起有时被称作端地址,即endpointaddressendpointaddress)。)。参数参数saddresslensaddresslen是以字节形式说明的服务器地址的长度。当是以字节形式说明的服务器地址的长度。当使用使用TCPTCP这样的面向连接的传输协议时,这样的面向连接的传输协议时,connectconnect启动一个指启动一个指定服务器的传输层连接。一般来说,定服务器的传输层连接。一般来说,connectconnect是客户用来与已是客户用来与已经调用了经调用了acceptaccept的服务器进行连接的过程。的服务器进行连接的过程。实现套接字实现套接字APIAPI的过程的过程24n n7 7SendSend、SendtoSendto与与SendmsgSendmsg过程过程客户与服务器都需要发送信息。通常客户发送请求,服务器发送客户与服务器都需要发送信息。通常客户发送请求,服务器发送应答。如果套接字已连接,应答。如果套接字已连接,sendsend过程可用来传输数据。过程可用来传输数据。sendsend有四有四个参数:个参数:send(socket,data,length,flag)send(socket,data,length,flag)参数参数socketsocket是使用的套接字的描述符。是使用的套接字的描述符。参数参数datadata是待发送数据在内存中的地址。是待发送数据在内存中的地址。参数参数lengthlength是一个整型数,表示数据的字节数,而参数是一个整型数,表示数据的字节数,而参数flagflag则包则包含了请求特殊选项的位(许多选项是为系统调试设计的,并不能含了请求特殊选项的位(许多选项是为系统调试设计的,并不能被普通的客户和服务器程序使用)。被普通的客户和服务器程序使用)。实现套接字实现套接字APIAPI的过程的过程25n n7 7SendSend、SendtoSendto与与SendmsgSendmsg过程过程SendtoSendto与与SendmsgSendmsg过程允许客户或服务器使用一个未连接的套接过程允许客户或服务器使用一个未连接的套接字发送信息,两者都需要调用者说明目的地。字发送信息,两者都需要调用者说明目的地。SendtoSendto将目的地地将目的地地址作为参数。它的形式为:址作为参数。它的形式为:sendto(socket,data,length,flag,destaddress,addresslen)sendto(socket,data,length,flag,destaddress,addresslen)前四个参数对应于前四个参数对应于sendsend过程的四个参数。过程的四个参数。后两个参数说明目的地地址与该地址的长度。后两个参数说明目的地地址与该地址的长度。参数参数destaddressdestaddress的类型为的类型为sockaddrsockaddr结构(特别地,在结构(特别地,在TCP/IPTCP/IP中为中为sockaddr_insockaddr_in结构)。结构)。实现套接字实现套接字APIAPI的过程的过程26n n7 7SendSend、SendtoSendto与与SendmsgSendmsg过程过程SendmsgSendmsg过程完成与过程完成与SendtoSendto过程相同的操作,但通过定义结构简化了参过程相同的操作,但通过定义结构简化了参数。这种较短的参数表使使用数。这种较短的参数表使使用SendmsgSendmsg的程序更易读:的程序更易读:sendmsg(socket,msgstruct,flag)sendmsg(socket,msgstruct,flag)参数参数msgstructmsgstruct是一个包括关于目的地地址、该地址长度、待发送信息是一个包括关于目的地地址、该地址长度、待发送信息及该信息长度等内容的结构:及该信息长度等内容的结构:structmsgstructstructmsgstruct/*sendmsg/*sendmsg使用的结构使用的结构* */ /structsockaddr*m_saddr;structsockaddr*m_saddr;/* /*目的地地址指针目的地地址指针* */ /structdatavec*m_dvec;structdatavec*m_dvec;/* /*信息(向量)指针信息(向量)指针* */ /intm_dvlength;intm_dvlength;/* /*向量中项数向量中项数* */ /structaccess*m_rights;structaccess*m_rights;/* /*访问权表指针访问权表指针* */ /intm_alength;intm_alength;/* /*表中项数表中项数* */ /;大多数应用仅仅使用前三个域,说明目的地协议地址和一列组成该信息大多数应用仅仅使用前三个域,说明目的地协议地址和一列组成该信息的数据项。的数据项。实现套接字实现套接字APIAPI的过程的过程27n n8 8RecvRecv、RecvfromRecvfrom与与RecvmsgRecvmsg过程过程客户与服务器都需要接收发自另一方的数据。套接字客户与服务器都需要接收发自另一方的数据。套接字APIAPI提供了提供了一些可用的过程。例如,一个应用可以调用一些可用的过程。例如,一个应用可以调用recvrecv从一个连接的套从一个连接的套接字接收数据。这个过程的形式为:接字接收数据。这个过程的形式为:recv(socket,buffer,length,flags)recv(socket,buffer,length,flags)参数参数socketsocket是从中接收数据的套接字的描述符。是从中接收数据的套接字的描述符。参数参数bufferbuffer表示用来存放接收到的数据的内存地址。表示用来存放接收到的数据的内存地址。参数参数lengthlength则表示这个缓冲区的大小。则表示这个缓冲区的大小。参数参数flagflag允许调用者控制一些细节(例如,允许应用在不将信息允许调用者控制一些细节(例如,允许应用在不将信息从套接字中移出的情况下提取它的一个副本等)。从套接字中移出的情况下提取它的一个副本等)。实现套接字实现套接字APIAPI的过程的过程28n n8 8RecvRecv、RecvfromRecvfrom与与RecvmsgRecvmsg过程过程如果一个套接字未连接,它可被用来接收从任意一组客户发来的如果一个套接字未连接,它可被用来接收从任意一组客户发来的信息。在这种情况下,系统返回每个接收到的信息和发送方地址。信息。在这种情况下,系统返回每个接收到的信息和发送方地址。应用使用应用使用RecvfromRecvfrom过程接收信息及发送方地址:过程接收信息及发送方地址:recvfrom(socket,buffer,length,flags,sndraddr,saddrlen)recvfrom(socket,buffer,length,flags,sndraddr,saddrlen)前四个参数对应于前四个参数对应于recvrecv过程的参数,剩下的两个参数过程的参数,剩下的两个参数sndraddrsndraddr和和saddrlensaddrlen用来记录发送方的用来记录发送方的IPIP地址。地址。参数参数sndraddrsndraddr是是sockaddrsockaddr结构的指针,系统将发送方地址写入其结构的指针,系统将发送方地址写入其中中参数参数saddrlensaddrlen是一个整型的指针,系统用它来记录地址的长度。是一个整型的指针,系统用它来记录地址的长度。RecvfromRecvfrom记录的发送方地址与记录的发送方地址与sendtosendto所期望的完全相同。所期望的完全相同。如果一个应用使用如果一个应用使用RecvfromRecvfrom来接收一个信息,发送一个回答将来接收一个信息,发送一个回答将是十分容易的是十分容易的应用只需简单地在回答中将记录的地址作为目的应用只需简单地在回答中将记录的地址作为目的地即可。地即可。实现套接字实现套接字APIAPI的过程的过程29n n8 8RecvRecv、RecvfromRecvfrom与与RecvmsgRecvmsg过程过程套接字套接字APIAPI包含了一个与包含了一个与sendmsgsendmsg输出过程相似的输入过程。输出过程相似的输入过程。RecvmsgRecvmsg过程所做的操作类似于过程所做的操作类似于RecvfromRecvfrom,但需要较少的参数。,但需要较少的参数。它的形式为:它的形式为:recvmsg(socket,msgstruct,flags)recvmsg(socket,msgstruct,flags)参数参数msgstructmsgstruct给出了一个结构的地址,这个结构包含了接收到给出了一个结构的地址,这个结构包含了接收到的信息的地址与发送方的的信息的地址与发送方的IPIP地址。地址。RecvmsgRecvmsg所记录的结构的格式与所记录的结构的格式与sendmsgsendmsg所要求的完全一样。所要求的完全一样。这样,这两个过程在接收信息与发送应答时能很好地配合。这样,这两个过程在接收信息与发送应答时能很好地配合。实现套接字实现套接字APIAPI的过程的过程30实现套接字实现套接字APIAPI的过程的过程n n9 9辅助过程辅助过程服务器在调用服务器在调用acceptaccept过程接收连接请求之后,它可以调用过程接收连接请求之后,它可以调用getpeernamegetpeername过程来获得启动连接的客户的完整地址。过程来获得启动连接的客户的完整地址。应用程序可以调用应用程序可以调用setsockoptsetsockopt过程存储套接字选项,过程存储套接字选项, getsockoptgetsockopt获获得当前选项值。选项主要用来处理特殊情况(例如,通过改变协议软得当前选项值。选项主要用来处理特殊情况(例如,通过改变协议软件使用的内部缓冲区大小来提高性能等)。件使用的内部缓冲区大小来提高性能等)。有两个过程可用来在有两个过程可用来在IPIP地址和计算机名之间进行转换。地址和计算机名之间进行转换。n ngethostbynamegethostbyname过程通过计算机名字返回该计算机的过程通过计算机名字返回该计算机的IPIP地址。客户经常使地址。客户经常使用用gethostbynamegethostbyname将用户输入的名字转换成相应的协议软件所需的将用户输入的名字转换成相应的协议软件所需的IPIP地址。地址。n ngethostbyaddrgethostbyaddr提供一个反向的映射提供一个反向的映射给出一台计算机的给出一台计算机的IPIP地址,它将返地址,它将返回该计算机的名字。客户与服务器可以在向人显示信息时使用回该计算机的名字。客户与服务器可以在向人显示信息时使用gethostbyaddrgethostbyaddr。31套接字套接字APIAPI的应用示例的应用示例这个例子包含服务器和客户两个部分,服务器打开一个这个例子包含服务器和客户两个部分,服务器打开一个TCPTCP端口,端口,绑定到本地地址上去,等待客户的连接,客户的连接被服务器接受后,绑定到本地地址上去,等待客户的连接,客户的连接被服务器接受后,服务器发送信息到客户并关闭这次连接、等待下一个客户的连接。客服务器发送信息到客户并关闭这次连接、等待下一个客户的连接。客户接收到信息后,显示在终端上,结束客户程序。户接收到信息后,显示在终端上,结束客户程序。2服务器代码服务器代码/* server.c - 使用TCP的服务器程序实例代码*/#ifndef WIN32#define closesocket close#include #include #include #include .详细1客户代码客户代码/* client.c - 使用TCP的客户程序实例代码*/ #ifndef WIN32 #define closesocket close #include #include . 详细 32B/SB/S编程模式及相关技术编程模式及相关技术n n7.3.1Web7.3.1Web基础知识基础知识n n7.3.2MVC7.3.2MVC思想和在思想和在WebWeb开发中的使用开发中的使用n n7.3.3Web7.3.3Web编程语言中的通用概念编程语言中的通用概念n n7.3.4Web7.3.4Web编程的例子编程的例子33WebWeb基础知识基础知识n n1 1统一资源定位器统一资源定位器n n2 2WebWeb服务器与浏览器服务器与浏览器n n3 3理解理解HTTPHTTPn n4 4 HTMLHTML34统一资源定位器统一资源定位器n nURLURL可以分为以下几部分可以分为以下几部分:Protocol:/(Protocol:/(协议协议) )(服务器名服务器名. .域域) )directory/(directory/(目录目录) )file(file(文件文件) )35统一资源定位器统一资源定位器n n其他常见的其他常见的URLURL为:为: ftp:/ftp:/服务器域名服务器域名/ /目录目录/ /文件。文件。ftp:/ftp:/用户名用户名服务器域名服务器域名/ /目录目录/ /文件。文件。telnet:/telnet:/服务器域名。服务器域名。news:/news:/新闻服务器域名新闻服务器域名/ /新闻组。新闻组。36n n用户可以使用用户可以使用URLURL向服务器传递数据。典型应用为向服务器方函数向服务器传递数据。典型应用为向服务器方函数传递参数。例如:传递参数。例如:http:/http:/服务器域名服务器域名/ /目录目录/ /文件文件/?/?用户名用户名Jamison&uid=300Jamison&uid=300此此URLURL向主页传递一对参数:用户名向主页传递一对参数:用户名JamisonJamison和和UID300UID300。n n有时,需要在有时,需要在URLURL中包含特殊字符如空隔或斜杠中包含特殊字符如空隔或斜杠(/)(/)。n n这些特殊字符必须重新编码以避免服务器出现问题。编码过程这些特殊字符必须重新编码以避免服务器出现问题。编码过程( (有时有时指指1616进制编码进制编码) )包括将特殊字符用其包括将特殊字符用其1616进制的数取代。进制的数取代。例如:假设例如:假设用户需要在用户需要在URLURL中列出用户全名:中列出用户全名:http:/http:/服务器域名服务器域名/ /目录目录/?/?用户名用户名Neal%20JamisonNeal%20Jamison在示例中,在示例中,NealNeal和和JaminsonJaminson间的空隔由与空隔等价的间的空隔由与空隔等价的1616进制的数取代。进制的数取代。统一资源定位器统一资源定位器37WebWeb服务器与浏览器服务器与浏览器n nWebWeb服务器是服务器是WebWeb的内容提供者。它响应客户端请求,并向客户端提供某种的内容提供者。它响应客户端请求,并向客户端提供某种形式的数据。形式的数据。n n这些数据采用超文本标记语言这些数据采用超文本标记语言(HTML)(HTML)。n nWebWeb浏览器是浏览器是WebWeb的客户端。浏览器包括与的客户端。浏览器包括与WebWeb服务器建立通信所需的软件服务器建立通信所需的软件及转换,并显示从服务器方返回数据的软件。及转换,并显示从服务器方返回数据的软件。n n常见的常见的WebWeb服务器有:服务器有:ApacheHTTPServer(http:/)ApacheHTTPServer(http:/)MicrosoftInternetInformationServer(IIS,http:/=7001)MicrosoftInternetInformationServer(IIS,http:/=7001)n n常见的常见的WebWeb浏览器有:浏览器有:) )MozillaFirefox(http:/)MozillaFirefox(http:/)NetscapeBrowser(http:/browser.netscape.com/ns8/)NetscapeBrowser(http:/browser.netscape.com/ns8/)OperaWebBrowser(http:/)OperaWebBrowser(http:/)38理解理解HTTPHTTPn nHTTPHTTP协议使协议使WebWeb服务器和浏览器可以通过服务器和浏览器可以通过WebWeb交换数据。它是一种交换数据。它是一种请求请求/ /响应协议,即服务器等待并响应客户方请求。响应协议,即服务器等待并响应客户方请求。n nHTTPHTTP不维护与客户方的连接,它使用可靠的不维护与客户方的连接,它使用可靠的TCPTCP连接,通常采用连接,通常采用TCP80TCP80端口。端口。n n客户客户/ /服务器传输过程可分为四个基本步骤:服务器传输过程可分为四个基本步骤:1)1)浏览器与服务器建立连接;浏览器与服务器建立连接;2)2)浏览器向服务器请求文档;浏览器向服务器请求文档;3)3)服务器响应浏览器请求;服务器响应浏览器请求;4)4)断开连接。断开连接。n nHTTPHTTP是一种无状态协议,它不维护连接的状态信息。是一种无状态协议,它不维护连接的状态信息。39理解理解HTTPHTTPn n为了使服务器与客户端通信成为可能,为了使服务器与客户端通信成为可能,HTTPHTTP协议建立了一协议建立了一种由请求和响应消息组成的种由请求和响应消息组成的WebWeb语言。语言。n n客户请求包含以下信息:客户请求包含以下信息:请求方法请求方法请求头请求头请求数据请求数据请求方法是用于特定请求方法是用于特定URLURL或或WebWeb页面的程序。页面的程序。40理解理解HTTPHTTP常用的请求方法有:常用的请求方法有:GETGET请求指定的文档请求指定的文档HEADHEAD仅请求文档头仅请求文档头POSTPOST请求服务器接收指定文档作为可执行的信息请求服务器接收指定文档作为可执行的信息头信息是可选项,它用于向服务器提供客户端的其他信息。头信息是可选项,它用于向服务器提供客户端的其他信息。如:如:AcceptAccept客户端接收的数据类型客户端接收的数据类型User-AgentUser-Agent 客户方软件类型客户方软件类型AuthorizationAuthorization认证消息,包括用户名和口令认证消息,包括用户名和口令RefererReferer引用当前请求的引用当前请求的WebWeb页面页面41理解理解HTTPHTTP如果客户采用某种方法获取数据如果客户采用某种方法获取数据( (如如POST)POST),数据就放在头,数据就放在头(header)(header)之后;否则客户机等待从服务器传来的响应。之后;否则客户机等待从服务器传来的响应。服务器响应包括以下关键部分:服务器响应包括以下关键部分:状态码状态码响应头响应头响应数据响应数据42理解理解HTTPHTTPHTTPHTTP定义了多组返回给浏览器的状态码。状态码是三位十进制数,状态定义了多组返回给浏览器的状态码。状态码是三位十进制数,状态码的最高位表明状态码的类别,常见的有以下类别:码的最高位表明状态码的类别,常见的有以下类别:2xx2xx成功,如成功,如200200表示请求成功等表示请求成功等3xx3xx重定向,如重定向,如302302暂时转移等暂时转移等4xx4xx客户方错误,如客户方错误,如403403表示用户权限不够、表示用户权限不够、404404表示文件未找到等表示文件未找到等5xx5xx服务器错误,如服务器错误,如500500表示服务器内部错误等表示服务器内部错误等响应头向客户方提供服务器和响应头向客户方提供服务器和/ /或请求文档的信息。所有的头均以空行结或请求文档的信息。所有的头均以空行结束。常用相应头有:束。常用相应头有:ServerWebServerWeb服务器信息服务器信息DateDate当前日期当前日期/ /时间时间LastModifiedLastModified请求文档最近修改时间请求文档最近修改时间ExpiresExpires请求文档过期时间请求文档过期时间Content-lengthContent-length数据长度数据长度( (字节字节) )Content-typeContent-type数据数据MIMEMIME类型类型43HTMLHTMLn n 超文本标记语言是所有浏览器都可以理解的标准语言。它超文本标记语言是所有浏览器都可以理解的标准语言。它是一组标明是一组标明WebWeb页面内容的标记组成。页面内容的标记组成。n nHTMLHTML与平台无关,因此,可以高效地从一个计算机环境与平台无关,因此,可以高效地从一个计算机环境传输到另一个计算机环境。传输到另一个计算机环境。44HTMLHTMLHTMLHTML使用标记指明信息的表现形式,标记的语法格式如下:使用标记指明信息的表现形式,标记的语法格式如下:信息信息类型开始于类型开始于结束于结束于,并且标记可以嵌套。,并且标记可以嵌套。45HTMLHTMLHTMLWebHTMLWeb页面包含三个部分:以页面包含三个部分:以表示表示HTMLHTML文件的开始,文件的开始,表示表示HTMLHTML文件的结束;文件的结束;和和包围的部分是包围的部分是HTMLHTML文件的头部,包含一些控制信息;文件的头部,包含一些控制信息;和和包含的是包含的是主体部分,是直接显示的正文部分。主体部分,是直接显示的正文部分。基本结构如下:基本结构如下:SamplePageSamplePage HelloWorld!HelloWorld!学习学习HTMLHTML就是学习标记的用法,常用的有:就是学习标记的用法,常用的有:表示段落表示段落表示换行表示换行表示超链接表示超链接表示图片表示图片46MVCMVC思想和在思想和在WebWeb开发中的使用开发中的使用n nMVCMVC最初是在最初是在Smalltalk-80Smalltalk-80中被用来构建用户界面的。中被用来构建用户界面的。n nMM代表模型代表模型Model,VModel,V代表视图代表视图 ViewView, C C代表控制器代表控制器ControllerController。n nMVCMVC的目的是增加代码的重用率,减少数据表达,数据描的目的是增加代码的重用率,减少数据表达,数据描述和应用操作的耦合度。述和应用操作的耦合度。 47MVCMVC思想和在思想和在WebWeb开发中的使用开发中的使用MVCMVC关系图关系图48MVCMVC思想和在思想和在WebWeb开发中的使用开发中的使用把这种思想拿到把这种思想拿到WebWeb开发中来,可以把开发中来,可以把WebWeb的开发放到三个的开发放到三个不同层次上去看:不同层次上去看:n n呈现层(呈现层(PresentationLayerPresentationLayer)用户用户UIUI,其实就是,其实就是HTMLHTML、JavascriptJavascript等的用户界面等的用户界面n n商业逻辑层(商业逻辑层(BusinessLogicLayerBusinessLogicLayer)处理用户请求,对用户输入处理用户请求,对用户输入的信息按照商业逻辑的要求进行处理,并把处理的结果交由呈现层的信息按照商业逻辑的要求进行处理,并把处理的结果交由呈现层返回给用户。一般使用返回给用户。一般使用ASPASP、PHPPHP、PerlPerl、JavaJava等语言进行处理等语言进行处理n n数据层(数据层(DataLayerDataLayer)对信息的抽象、描述和存储,一般指存储对信息的抽象、描述和存储,一般指存储信息的数据库系统、文件系统等信息的数据库系统、文件系统等49MVCMVC思想和在思想和在WebWeb开发中的使用开发中的使用3 3层层WebWeb应用:应用:50WebWeb编程语言中的通用概念编程语言中的通用概念1 1RequestRequest2 2ResponseResponse3 3Application/ContextApplication/Context4 4SessionSession5 5Server/SystemServer/System51WebWeb编程语言中的通用概念编程语言中的通用概念RequestRequest对象对象/ /数组包含了一次数组包含了一次HTTPHTTP请求的所有信息,包括浏览器请求的所有信息,包括浏览器的请求方法(的请求方法(MethodMethod)、请求)、请求URLURL、请求头信息、请求数据等信、请求头信息、请求数据等信息,程序设计者可以通过它从呈现层获取用户数据。如在息,程序设计者可以通过它从呈现层获取用户数据。如在ASPASP中中可以通过可以通过RequestRequest对象获取通过对象获取通过WebWeb表单(表单(FormForm)提交过来的信)提交过来的信息:息:Request.form(”userName”)Request.form(”userName”)实现同样的功能,在实现同样的功能,在JSPJSP里要这样来写里要这样来写:request.getParameter(”userName”);request.getParameter(”userName”);52WebWeb编程语言中的通用概念编程语言中的通用概念n n2 2ResponseResponse与与RequestRequest对应,对应,ResponseResponse则包含了一次则包含了一次HTTPHTTP相应的所有信息,相应的所有信息,如把如把HTMLHTML发送给浏览器、重定向用户请求等。,如在发送给浏览器、重定向用户请求等。,如在ASPASP中可以中可以这样把一个信息发送给浏览器:这样把一个信息发送给浏览器: 在在JSPJSP里里ResponseResponse的输出必须用的输出必须用outout来写,所以上面的语法到来写,所以上面的语法到JSPJSP里为:里为:Response.write”Helloworld!”Response.write”Helloworld!”out.print(”Helloworld!”);out.print(”Helloworld!”);53WebWeb编程语言中的通用概念编程语言中的通用概念n n3.3.Application/ContextApplication/ContextApplicationApplication常常指一次常常指一次WebWeb服务器的启动环境,包含了与这一次服务器的启动环境,包含了与这一次启动有关的任何数据,它为所有在这次启动中的客户所共有。如启动有关的任何数据,它为所有在这次启动中的客户所共有。如一个很简单的聊天程序用一个很简单的聊天程序用ASPASP来实现可以这样来写,一个用户使来实现可以这样来写,一个用户使用以下语句把信息写入用以下语句把信息写入ApplicationApplication:Application(”chatinfo”)=”Helloeverybody!”Application(”chatinfo”)=”Helloeverybody!”其他用户可以简单地通过引用其他用户可以简单地通过引用Application(“chatinfo”)Application(“chatinfo”),就可以取,就可以取到这条信息:到这条信息:Response.writeApplication(”chatinfo”)Response.writeApplication(”chatinfo”)54WebWeb编程语言中的通用概念编程语言中的通用概念n n4.4.SessionSessionWebWeb编程语言使用编程语言使用SessionSession的概念来说明客户的一次连续访问的概念来说明客户的一次连续访问. .同一时刻来自不同客户同一时刻来自不同客户IPIP地址的请求也会被看作是不同的多个地址的请求也会被看作是不同的多个SessionSession。每个每个SessionSession,系统都会分配一个,系统都会分配一个SessionIDSessionID给它来标示自己,给它来标示自己,在在ASPASP中存取中存取SessionSession变量的方法如下:变量的方法如下:Session(”userName”)=”Session(”userName”)=”张三张三”Response.writeSession(”userName”)Response.writeSession(”userName”)每个客户都可以在每个客户都可以在SessionSession的的userNameuserName中存储自己的姓名,每次取出时中存储自己的姓名,每次取出时也只能取出自己的。也只能取出自己的。55WebWeb编程语言中的通用概念编程语言中的通用概念n n4.4.SessionSessionSessionSession也有两个类似的事件,分别是也有两个类似的事件,分别是Session_OnStartSession_OnStart和和Session_OnEndSession_OnEnd。举一个联合使用举一个联合使用ApplicationApplication和和SessionSession事件的例子事件的例子统计网站统计网站实时在线人数,正式的代码如下:实时在线人数,正式的代码如下:SubApplication_OnStart()SubApplication_OnStart()Application(userCount)=0Application(userCount)=0EndSubEndSubSubSession_OnStart()SubSession_OnStart()Application(userCount)=Application(userCount)+1Application(userCount)=Application(userCount)+1EndSubEndSubSubSession_OnEnd()SubSession_OnEnd()Application(userCount)=Application(userCount)-1Application(userCount)=Application(userCount)-1EndSubEndSub其中的和是为了在多用户写同一数据时,保证他们互斥访其中的和是为了在多用户写同一数据时,保证他们互斥访问,避免出现同步问题。问,避免出现同步问题。56WebWeb编程语言中的通用概念编程语言中的通用概念n n5.5.Server/SystemServer/SystemASPASP中的中的SystemSystem对象或对象或JavaJava中的中的SystemSystem对象可以为编程语言提供对象可以为编程语言提供一些系统服务,如一些系统服务,如Server.CreateObject(“ADODB.Connection”)Server.CreateObject(“ADODB.Connection”)可可以创建以创建ADOADO数据库连接对象,在数据库连接对象,在JSPJSP或或ServletServlet的编程中的编程中System.currentTimeMillisSystem.currentTimeMillis() ()可以返回当前时间信息等。可以返回当前时间信息等。57WebWeb编程的例子编程的例子这里用一个提交用户信息的例子来演示一下这里用一个提交用户信息的例子来演示一下WebWeb编程编程: :n n提交的用户信息包括用户名、密码、姓名、身份证号、居住省份提交的用户信息包括用户名、密码、姓名、身份证号、居住省份等信息。等信息。n n例子包含两个部分,供用户填写的表单部分()和处理用户输入例子包含两个部分,供用户填写的表单部分()和处理用户输入的部分(或)。的部分(或)。58WebWeb编程的例子编程的例子1 1表单部分(表单部分()浏览器中的显示结果如下图浏览器中的显示结果如下图: : 59WebWeb编程的例子编程的例子2 2处理用户输入部分处理用户输入部分JSPJSP代码,执行结果如图如下图代码,执行结果如图如下图: : 60WebWeb编程的例子编程的例子3 3处理用户输入部分处理用户输入部分ASPASP代码,浏览器中的显示结果类似下图代码,浏览器中的显示结果类似下图: : 61
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号