23
计计计计计 计计计计计 计计计 计计 计计计 计计 / / 计计计计计 计计计计计 (Chapter26-28) (Chapter26-28) 计计计 计计计 计计计计计计计计[email protected] [email protected]

计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

Embed Size (px)

DESCRIPTION

计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28). 房鼎益 电子邮件: [email protected]. 计算机网络 第 26 章 客户 / 服务器交互. 第 26 章 客户 / 服务器交互. 应用层概述 客户 / 服务器交互概念 需要澄清的几个概念 标识一个特定服务 并发服务器. - PowerPoint PPT Presentation

Citation preview

Page 1: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

计算机网络计算机网络

第七讲 客户第七讲 客户 // 服务器编程服务器编程(Chapter26-28)(Chapter26-28)

计算机网络计算机网络

第七讲 客户第七讲 客户 // 服务器编程服务器编程(Chapter26-28)(Chapter26-28)

房鼎益房鼎益

电子邮件:电子邮件: [email protected]@nwu.edu.cn

Page 2: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

22网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 26 章 客户 / 服务器交互

第第 2626 章章 客户客户 // 服务器交互服务器交互 应用层概述应用层概述 客户客户 // 服务器交互概念服务器交互概念 需要澄清的几个概念 需要澄清的几个概念 标识一个特定服务 标识一个特定服务 并发服务器并发服务器

Page 3: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

33网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 26 章 客户 / 服务器编程

应用层概述应用层概述 应用层提供面向用户的服务应用层提供面向用户的服务 应用层利用底层协议提供的服务进行通信 应用层利用底层协议提供的服务进行通信

通用的可靠数据传输服务 通用的可靠数据传输服务 寻址(主机、应用程序)服务寻址(主机、应用程序)服务

应用程序之间的通信都使用同一种交互方应用程序之间的通信都使用同一种交互方式,这种交互方式称为客户式,这种交互方式称为客户 // 服务器服务器 (Cli(Client/Server)ent/Server) 模式。 模式。

Page 4: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

44网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 26 章 客户 / 服务器编程

客户客户 // 服务器交互服务器交互概念概念(( 11 )) 客户客户 // 服务器交互:客户应用主动地启动通信,服务器交互:客户应用主动地启动通信,

而服务器应用被动地等待。 而服务器应用被动地等待。 客户端软件的特性: 客户端软件的特性:

是一个普通的应用程序 是一个普通的应用程序 在用户的计算机上本地运行 在用户的计算机上本地运行 直接被用户调用,可分时访问多个服务直接被用户调用,可分时访问多个服务主动地与服务器启动通信 主动地与服务器启动通信 不需要特殊的硬件和高级的操作系统 不需要特殊的硬件和高级的操作系统

Page 5: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

55网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 26 章 客户 / 服务器编程

客户客户 // 服务器交互服务器交互概念概念(( 22 ))

服务器软件的特性: 服务器软件的特性: 是一种专门用来提供某一种服务的程序 是一种专门用来提供某一种服务的程序 在一台共享计算机上运行 在一台共享计算机上运行 在系统初启时自动启动,可以同时与多个在系统初启时自动启动,可以同时与多个远程客户进行通信 远程客户进行通信

被动地等待来自任意客户的通信被动地等待来自任意客户的通信需要强大的硬件和高级的操作系统支持 需要强大的硬件和高级的操作系统支持

Page 6: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

66网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 26 章 客户 / 服务器编程

几个需要澄清的概念几个需要澄清的概念 服务器:指一个被动地等待通信的程序。服务器:指一个被动地等待通信的程序。 服务器级计算机:具有快速服务器级计算机:具有快速 CPUCPU 、大存储、大存储量和强大操作系统的计算机。量和强大操作系统的计算机。

一台服务器级计算机可以提供多重服务,一台服务器级计算机可以提供多重服务,以共享资源,减小开销,便于管理。以共享资源,减小开销,便于管理。

服务器程序既可以接收信息也能发送信息,服务器程序既可以接收信息也能发送信息,还可以成为客户。还可以成为客户。

客户并不限于访问一种服务器。客户并不限于访问一种服务器。

Page 7: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

77网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 26 章 客户 / 服务器编程

客户客户 // 服务器交互服务器交互—服务标识—服务标识 (service ID)(service ID) TCPTCP 赋予每个服务一个唯一的协议端口号。服务赋予每个服务一个唯一的协议端口号。服务器通过协议端口号来指定它所提供的服务,然后器通过协议端口号来指定它所提供的服务,然后被动地等待通信。 被动地等待通信。

客户在发送请求时通过协议端口号来指定它所希客户在发送请求时通过协议端口号来指定它所希望的服务。服务器端计算机通过此端口号将收到望的服务。服务器端计算机通过此端口号将收到的请求转发给正确的服务器。 的请求转发给正确的服务器。

每一个会话由两个标识唯一确定:服务器和客户每一个会话由两个标识唯一确定:服务器和客户端的(端的( IPIP 地址,端口号)。客户端的端口号可地址,端口号)。客户端的端口号可以是任意选定,但必须唯一。以是任意选定,但必须唯一。

Page 8: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

88网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 26 章 客户 / 服务器编程

客户客户 // 服务器交互服务器交互——并发服——并发服务务 并发服务器是指一个服务器可以同时为多个客并发服务器是指一个服务器可以同时为多个客

户提供服务。 户提供服务。 服务器在每一个客户请求到来时创建一个新的服务器在每一个客户请求到来时创建一个新的线程。如果有线程。如果有 NN 个客户正在使用一台机器上的个客户正在使用一台机器上的服务,则存在服务,则存在 N+1N+1 个提供该服务的线程:主线个提供该服务的线程:主线程等待更多的请求,同时有程等待更多的请求,同时有 NN 个从线程分别同个从线程分别同一个客户进行交互。一个客户进行交互。

服务器端使用客户标识和服务器标识的结合来服务器端使用客户标识和服务器标识的结合来选择正确的并发服务器的副本。 选择正确的并发服务器的副本。

Page 9: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

99网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 27 章 套接字接口

第第 2727 章章 套接字套接字 (socket)(socket) 接接口口

套接字套接字 APIAPI 概念概念 实现套接字实现套接字 APIAPI 的过程 的过程 用套接字进行读写用套接字进行读写 其它套接字过程其它套接字过程 套接字、线程与继承套接字、线程与继承

Page 10: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1010网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 27 章 套接字接口

套接字接口概念套接字接口概念 API: API: 应用程序通过传输协议进行交互时所使用的接应用程序通过传输协议进行交互时所使用的接

口称为应用程序接口(口称为应用程序接口( APIAPI )。)。 通信协议只定义通信协议只定义 APIAPI 应当提供的一般操作,而让操作应当提供的一般操作,而让操作

系统来定义完成这些操作的系统来定义完成这些操作的 APIAPI 规范。规范。 APIAPI 允许应用允许应用程序在不同平台兼容。程序在不同平台兼容。

套接字套接字 APIAPI 最初是最初是 BSD UNIXBSD UNIX 操作系统的一部分,后操作系统的一部分,后来成为工业界事实上的标准。来成为工业界事实上的标准。

应用程序通过套接字进行通信的过程,与应用程序与应用程序通过套接字进行通信的过程,与应用程序与文件进行数据交换是很相似的文件进行数据交换是很相似的。。

Page 11: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1111网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 27 章 套接字接口

套接字接口的过程套接字接口的过程 SOCKET:SOCKET: 创建一个新的套接字创建一个新的套接字 BIND:BIND: 给服务器绑定一个传输层地址给服务器绑定一个传输层地址 LISTEN:LISTEN: 将服务器设为被动模式。将服务器设为被动模式。 ACCEPT:ACCEPT: 接收客户的一个请求接收客户的一个请求 CONNET:CONNET: 客户向服务器发起连接客户向服务器发起连接 SEND:SEND: 向一个连接的套接字发送数据向一个连接的套接字发送数据 RECVRECV:从一个连接的套接字接收数据 :从一个连接的套接字接收数据 CLOSECLOSE:终止一个连接:终止一个连接

Page 12: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1212网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 27 章 套接字接口

用套接字进行读写用套接字进行读写 套接字允许使用套接字允许使用 readread 和和 writewrite 进行数据传输进行数据传输 readread 和和 writewrite 有三个参数:套接字描述符,有三个参数:套接字描述符,缓冲区,缓冲区长度缓冲区,缓冲区长度

readread 和和 writewrite 必须用于已连接的套接字必须用于已连接的套接字 使用使用 readread 和和 writewrite 的优点是应用程序可以同的优点是应用程序可以同一个描述符进行数据传输,而无需知道此描述一个描述符进行数据传输,而无需知道此描述符对应的是一个文件还是一个套接字。因此可符对应的是一个文件还是一个套接字。因此可以用本地文件来测试套接字。以用本地文件来测试套接字。

Page 13: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1313网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 27 章 套接字接口

其它套接字过程其它套接字过程 Getsockname:Getsockname: 获得套接字本地完整地址。获得套接字本地完整地址。 Getpeername:Getpeername: 获得套接字远端完整地址。获得套接字远端完整地址。 GetsockoptGetsockopt :获得当前套接字选项。:获得当前套接字选项。 SetsockoptSetsockopt :设置当前套接字选项。:设置当前套接字选项。 GethostbynameGethostbyname :由计算机名字获得:由计算机名字获得 IPIP 地址。地址。 GethostbyaddrGethostbyaddr :由:由 IPIP 地址获得计算机名字。地址获得计算机名字。 GetprotobynameGetprotobyname :由协议名字得到协议号。:由协议名字得到协议号。

Page 14: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1414网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 27 章 套接字接口

套接字、线程与继承套接字、线程与继承 每个新创建的线程从创建它的线程继承所有套每个新创建的线程从创建它的线程继承所有套接字的一个副本。接字的一个副本。

服务器主线程为每一个连接的客户创建一个新服务器主线程为每一个连接的客户创建一个新的套接字和新线程。的套接字和新线程。

主线程关闭新套接字,新线程关闭旧套接字。主线程关闭新套接字,新线程关闭旧套接字。 系统对套接字的引用进行计数,计数器为系统对套接字的引用进行计数,计数器为 00 才才能删除套接字。能删除套接字。

Page 15: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1515网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 28 章 客户 / 服务器编程

第第 2828 章章 客户客户 // 服务器编程实服务器编程实例例

面向连接的通信面向连接的通信 流服务与多重流服务与多重 recvrecv 调用调用 套接字过程与阻塞套接字过程与阻塞 客户访问不同的服务客户访问不同的服务 其它客户访问服务器 其它客户访问服务器 无连接的通信 无连接的通信

Page 16: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1616网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 28 章 客户 / 服务器编程

编程实例——面向连接的通信编程实例——面向连接的通信

Page 17: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1717网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 28 章 客户 / 服务器编程

编程实例——面向连接的通信编程实例——面向连接的通信

MS Socket

Page 18: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1818网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 28 章 客户 / 服务器编程

流服务与多重流服务与多重 recvrecv 调用调用

在服务器端,只调用了一次在服务器端,只调用了一次 send()send() 。。 在客户端,循环调用在客户端,循环调用 recv()recv() 接收数据。接收数据。 TCPTCP 并不保证数据在单个数据段中发出。并不保证数据在单个数据段中发出。 TCPTCP 也不保证也不保证 recvrecv 返回的恰好是返回的恰好是 sendsend 所传所传送的数据量。送的数据量。

TCPTCP 保证保证 sendsend 将数据依次发送将数据依次发送 TCPTCP 保证保证 recvrecv 调用返回一个或多个数据。调用返回一个或多个数据。

Page 19: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

1919网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 28 章 客户 / 服务器编程

套接字过程与阻塞套接字过程与阻塞 在程序调用套接字过程时,程序会因为套接字过在程序调用套接字过程时,程序会因为套接字过程需要等待其它资源或过程而被挂起(阻塞)。程需要等待其它资源或过程而被挂起(阻塞)。

程序被挂起时不使用程序被挂起时不使用 CPUCPU 时间,挂起时间可以任时间,挂起时间可以任意长。意长。

阻塞过程有:阻塞过程有: accept, connect, send, recv, accept, connect, send, recv, gethostbyname gethostbyname 等。等。

Page 20: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

2020网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 28 章 客户 / 服务器编程

测试客户测试客户 // 服务器程序服务器程序 可以去访问其它的服务器来测试客户。可以去访问其它的服务器来测试客户。 可以使用可以使用 telnettelnet 客户程序测试服务器。客户程序测试服务器。

Page 21: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

2121网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 28 章 客户 / 服务器编程

编程实例——无连接的通信编程实例——无连接的通信

Page 22: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

2222网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 28 章 客户 / 服务器编程

编程实例——无连接的通信编程实例——无连接的通信

MS Socket

Page 23: 计算机网络 第七讲 客户 / 服务器编程 (Chapter26-28)

2323网络与分布式系统研究室 (DisNet Lab of NWU)

23/4/19

计算机网络 第 28 章 客户 / 服务器编程

实验实验 3311 、写一个时间服务器和客户程序,即客户从、写一个时间服务器和客户程序,即客户从服务器获取时间并以用户友好方式显示。服务器获取时间并以用户友好方式显示。

要用到的特殊头文件要用到的特殊头文件 <time.h><time.h> 中的函数 中的函数 time_t time(time_t *)time_t time(time_t *) ,单位是秒。,单位是秒。

char * ctime(const time_t *)char * ctime(const time_t *) 格式为:格式为: