ClinetServer模型与Socket编程接口PPT课件_第1页
ClinetServer模型与Socket编程接口PPT课件_第2页
ClinetServer模型与Socket编程接口PPT课件_第3页
ClinetServer模型与Socket编程接口PPT课件_第4页
ClinetServer模型与Socket编程接口PPT课件_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、第十二章第十二章 Clinet/Server模型与模型与Socket编程接口编程接口12.1 网络间进程通信12.2 Client/Server模型12.3 Socket编程接口12.3.1 Socket基本概念12.3.2 Socket系统调用其它系统调用12.4 基于Client/Server模型的Socket编程举例12.4.1 Client/Server模型流程图12.4.2 Server实现机制12.4.3 UNIX环境下的Socket编程举例第1页/共23页12.1 网络间进程通信网络间进程通信 问题一:进程标识的问题 在同一台主机上,不同进程可以用进程号(Process ID)来

2、标识;但在网络环境下,不能用进程号来唯一地标识某主机上的通信进程。 问题二:多重协议的识别问题 不同协议的地址格式不同;不同协议的端口分配相互独立;不同协议的工作方式不同(比如有面向连接与无连接的区别) 问题三:进程间的相互作用模式 Client/Server 分布式系统第2页/共23页网络进程标识 全局唯一的标识一个进程需要用一个三元组(socket地址)(协议,本地主机地址,本地端口号) 一个完整的网络进程通信(包括两个用户进程)需要一个五元组来标识(一对socket地址)(协议,本地主机地址,本地端口号,远地主机地址,远地端口号)第3页/共23页12.2 Client/Server模型模

3、型 客户内核服务器内核请求应答网络第4页/共23页12.3 BSD Unix Socket编程接口 在因特网中,两台主机上的应用进程在通信之前,必须首先各自创建一个socket,然后再通过bind系统调用对socket进行相应的地址赋值操作,最后应用进程就可以通过socket使用TCP/IP协议来发送和接收数据。 每一个socket有一个唯一的整数标识符,即socket号,该socket号通常由操作系统分配,应用进程通过socket号来引用socket。第5页/共23页BSD Unix socket系统调用1. 创建socket:socket( )2. 指定本地地址:bind( )3. 建立s

4、ocket连接:connect( )4. 接收连接请求:listen( ) &accept( )5. 发送数据:send( ) & sendto( )6. 接收数据:recv( ) & recvfrom( )第6页/共23页1. 创建socketsocket( ) 创建socket的系统调用是socket( ),其调用格式如下sockidsocket(af,type,protocol)返回值sockid是一个整数,即socket号,创建一个socket实际上是向系统申请一个属于自己的socket号 socket( )系统调用的三个参数 AF(Address Family

5、) Type Protocol第7页/共23页2. 指定本地地址bind( ) bind( )系统调用是将本地socket地址(包括本地主机地址和本地端口)与所创建的socket号联系起来,即将本地socket地址赋予该socket。 bind( )的调用格式为 bind(sockid,localaddr,addrlen )其中, sockid,已获得的socket号。 localaddr,本地socket地址:包括本地主机地址和端口号。 addrlen,本地socket地址长度,表示以字节为单位的本地socket地址结构的长度。第8页/共23页3. 请求建立连接connect( ) 面向连接

6、的客户进程通过connect( ) 调用建立与服务器的连接 对于大多数面向连接的协议(如TCP协议),connect( )系统调用将在客户进程和服务器进程之间建立一条传输连接(如TCP连接),connect( ) 调用要等到系统将传输连接建立完后才返回,否则将返回出错信息。第9页/共23页connect( )的调用格式 connect(sockid,destaddr,addrlen )其中参数意义如下 sockid,本地socket号。 destaddr,是一个指向服务器的socket地址(信宿地址)结构的指针 addr1en,信宿方socket地址长度第10页/共23页4. 接收连接建立请求

7、listen( )和accept( ) 面向连接的服务器进程一般在某个众所周知的端口上接收客户进程的连接建立请求。服务器进程平时处于睡眠状态,一旦有连接建立请求来到时,服务器进程被唤醒并处理客户进程的连接建立请求。 面向连接的服务器进程通过listen( )和accept( ) 系统调用来接收并处理客户进程的连接建立请求。 1isten( )系统调用表明服务器进程愿意接收客户进程的连接请求。 accept( )系统调用用于服务器进程处理客户进程的连接建立请求。第11页/共23页1isten( )系统调用 listen( )一般在accept( )之前调用,其调用格式为: listen(sock

8、id,quelen)其中: sockid,本地socket号,服务器进程在此socket地址上接收连接建立请求。 quelen,连接建立请求队列长度。listen( )系统调用以此参数限制连接请求的排队个数,通常允许的连接请求排队长度最大值为5。第12页/共23页accept( )系统调用(1) accept( )系统调用用于服务器进程处理客户进程的连接请求,其调用格式如下: newsock = accept(sockid,clientaddr,addrlen)其中各个调用参数意义如下: sockid,本地socket号。 clientaddr,指向客户socket地址结构的指针。 addrl

9、en,客户socket地址长度。第13页/共23页accept( )系统调用(2)clientaddr指向一个初始值为空的地址结构,当accept( )调用返回后,客户进程的socket地址被填入该地址结构中。addrlen的初始值为0,accept( )调用返回后保存了客户进程socket地址的长度。第14页/共23页 newsock 在并发服务器处理方式中,主服务器进程将fork一个子进程(即从服务器),从服务器子进程通过新socket号(newsock)引用socket来真正处理客户进程的请求(数据或撤销连接请求)。主服务器进程继续通过原来的sockid来引用socket处理其他客户进程

10、的连接建立请求。 当newsock的值小于0时,表明accept( )调用出错。第15页/共23页利用利用accept( )建立并发服务器建立并发服务器 客户socket 原socket fork 连接建立 连接请求 listen( ) accept( ) 请求处理 connect( ) 主进程 子进程 客户 新 socket 第16页/共23页5发送数据 send( ) 、write( )和writev( ) 用于面向连接的数据发送,面向连接的数据发送系统调用中可以不必指定接收方socket地址;例如 send(sockid,buf,buflen,flags) sendto( )和sendm

11、sg( )用于无连接的数据发送,无连接的数据发送系统调用必须明确指定接收方的socket地址 sendto(sockid,buf,buflen,flags,destadd,addrlen)第17页/共23页6接收数据 接收数据系统调用与发送数据系统调用是一一对应的。 面向连接的数据接收 recv(sockid,buf,buflen,flags) 无连接的数据发送 recvfrom(sockid,buf,buflen,flags,suradd,addrlen)第18页/共23页面向连接客户/服务器模型时序图socket( )bind( )recv( )send( )close( )connect

12、( )send( )数据发送数据发送阻塞,等待客户请求服务器图12-3 面向连接客户/服务器时序图listen( )accept( )请求建立连接socket( )客户recv( )close( )第19页/共23页说明 同步是客户/服务器模型实现中的一个重要问题,socket系统调用很好地解决了这个问题。 服务器进程必须首先启动,等待服务器进程执行完accept( )调用,服务器进程阻塞并等待客户发出连接建立请求。 假如客户进程比服务器进程先启动,则它发出的connect( )系统调用将返回出错代码,连接建立不成功。第20页/共23页无连接客户/服务器模型时序图socket( )bind( )readfrom( )sendto( )close( )socket( )bind( )sendto( )readfrom( )close( )服务请求服务响应阻塞等待客户请求服务器客户第21页/共23页说明 那么无连接socket是如何实现彼此通信的。 在

温馨提示

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

评论

0/150

提交评论