ClinetServer模型与Socket编程接口PPT课件

上传人:牛*** 文档编号:98069878 上传时间:2022-05-28 格式:PPTX 页数:23 大小:146.73KB
返回 下载 相关 举报
ClinetServer模型与Socket编程接口PPT课件_第1页
第1页 / 共23页
ClinetServer模型与Socket编程接口PPT课件_第2页
第2页 / 共23页
ClinetServer模型与Socket编程接口PPT课件_第3页
第3页 / 共23页
点击查看更多>>
资源描述
第十二章第十二章 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)来标识;但在网络环境下,不能用进程号来唯一地标识某主机上的通信进程。 问题二:多重协议的识别问题 不同协议的地址格式不同;不同协议的端口分配相互独立;不同协议的工作方式不同(比如有面向连接与无连接的区别) 问题三:进程间的相互作用模式 Client/Server 分布式系统第2页/共23页网络进程标识 全局唯一的标识一个进程需要用一个三元组(socket地址)(协议,本地主机地址,本地端口号) 一个完整的网络进程通信(包括两个用户进程)需要一个五元组来标识(一对socket地址)(协议,本地主机地址,本地端口号,远地主机地址,远地端口号)第3页/共23页12.2 Client/Server模型模型 第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. 建立socket连接: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) 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( ) 面向连接的客户进程通过connect( ) 调用建立与服务器的连接 对于大多数面向连接的协议(如TCP协议),connect( )系统调用将在客户进程和服务器进程之间建立一条传输连接(如TCP连接),connect( ) 调用要等到系统将传输连接建立完后才返回,否则将返回出错信息。第9页/共23页connect( )的调用格式 connect(sockid,destaddr,addrlen )其中参数意义如下 sockid,本地socket号。 destaddr,是一个指向服务器的socket地址(信宿地址)结构的指针 addr1en,信宿方socket地址长度第10页/共23页4. 接收连接建立请求listen( )和accept( ) 面向连接的服务器进程一般在某个众所周知的端口上接收客户进程的连接建立请求。服务器进程平时处于睡眠状态,一旦有连接建立请求来到时,服务器进程被唤醒并处理客户进程的连接建立请求。 面向连接的服务器进程通过listen( )和accept( ) 系统调用来接收并处理客户进程的连接建立请求。 1isten( )系统调用表明服务器进程愿意接收客户进程的连接请求。 accept( )系统调用用于服务器进程处理客户进程的连接建立请求。第11页/共23页1isten( )系统调用 listen( )一般在accept( )之前调用,其调用格式为: listen(sockid,quelen)其中: sockid,本地socket号,服务器进程在此socket地址上接收连接建立请求。 quelen,连接建立请求队列长度。listen( )系统调用以此参数限制连接请求的排队个数,通常允许的连接请求排队长度最大值为5。第12页/共23页accept( )系统调用(1) accept( )系统调用用于服务器进程处理客户进程的连接请求,其调用格式如下: newsock = accept(sockid,clientaddr,addrlen)其中各个调用参数意义如下: sockid,本地socket号。 clientaddr,指向客户socket地址结构的指针。 addrlen,客户socket地址长度。第13页/共23页accept( )系统调用(2)clientaddr指向一个初始值为空的地址结构,当accept( )调用返回后,客户进程的socket地址被填入该地址结构中。addrlen的初始值为0,accept( )调用返回后保存了客户进程socket地址的长度。第14页/共23页 newsock 在并发服务器处理方式中,主服务器进程将fork一个子进程(即从服务器),从服务器子进程通过新socket号(newsock)引用socket来真正处理客户进程的请求(数据或撤销连接请求)。主服务器进程继续通过原来的sockid来引用socket处理其他客户进程的连接建立请求。 当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( )和sendmsg( )用于无连接的数据发送,无连接的数据发送系统调用必须明确指定接收方的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( )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是如何实现彼此通信的。 在服务器一端,无连接服务器进程通过socket( )和bind( )建立了本地半相关;而在客户机一端,无连接客户进程通过调用bind( )也建立了一个本地半相关。 在发送数据过程中,发送方指定本地socket地址和信宿端socket地址,于是,一个完整的相关在数据发送和接收过程中动态地建立起来,实现了无连接客户进程和服务器进程彼此之间的通信。第22页/共23页感谢您的观看!第23页/共23页
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!