ClinetServer模型与Socket编程接口

上传人:san****019 文档编号:16506651 上传时间:2020-10-04 格式:PPT 页数:23 大小:305.81KB
返回 下载 相关 举报
ClinetServer模型与Socket编程接口_第1页
第1页 / 共23页
ClinetServer模型与Socket编程接口_第2页
第2页 / 共23页
ClinetServer模型与Socket编程接口_第3页
第3页 / 共23页
点击查看更多>>
资源描述
第十二章 Clinet/Server模型与Socket编程接口,12.1 网络间进程通信 12.2 Client/Server模型 12.3 Socket编程接口 12.3.1 Socket基本概念 12.3.2 Socket系统调用 12.3.3其它系统调用 12.4 基于Client/Server模型的Socket编程举例 12.4.1 Client/Server模型流程图 12.4.2 Server实现机制 12.4.3 UNIX环境下的Socket编程举例,12.1 网络间进程通信,问题一:进程标识的问题 在同一台主机上,不同进程可以用进程号(Process ID)来标识;但在网络环境下,不能用进程号来唯一地标识某主机上的通信进程。 问题二:多重协议的识别问题 不同协议的地址格式不同;不同协议的端口分配相互独立;不同协议的工作方式不同(比如有面向连接与无连接的区别) 问题三:进程间的相互作用模式 Client/Server 分布式系统,网络进程标识,全局唯一的标识一个进程需要用一个三元组(socket地址) (协议,本地主机地址,本地端口号) 一个完整的网络进程通信(包括两个用户进程)需要一个五元组来标识(一对socket地址) (协议,本地主机地址,本地端口号,远地主机地址,远地端口号),12.2 Client/Server模型,12.3 BSD Unix Socket编程接口,在因特网中,两台主机上的应用进程在通信之前,必须首先各自创建一个socket,然后再通过bind系统调用对socket进行相应的地址赋值操作,最后应用进程就可以通过socket使用TCP/IP协议来发送和接收数据。 每一个socket有一个唯一的整数标识符,即socket号,该socket号通常由操作系统分配,应用进程通过socket号来引用socket。,BSD Unix socket系统调用,1. 创建socket:socket( ) 2. 指定本地地址:bind( ) 3. 建立socket连接:connect( ) 4. 接收连接请求:listen( ) &accept( ) 5. 发送数据:send( ) & sendto( ) 6. 接收数据:recv( ) & recvfrom( ),1. 创建socketsocket( ),创建socket的系统调用是socket( ),其调用格式如下 sockidsocket(af,type,protocol) 返回值sockid是一个整数,即socket号,创建一个socket实际上是向系统申请一个属于自己的socket号 socket( )系统调用的三个参数 AF(Address Family) Type Protocol,2. 指定本地地址bind( ),bind( )系统调用是将本地socket地址(包括本地主机地址和本地端口)与所创建的socket号联系起来,即将本地socket地址赋予该socket。 bind( )的调用格式为 bind(sockid,localaddr,addrlen ) 其中, sockid,已获得的socket号。 localaddr,本地socket地址:包括本地主机地址和端口号。 addrlen,本地socket地址长度,表示以字节为单位的本地socket地址结构的长度。,3. 请求建立连接connect( ),面向连接的客户进程通过connect( ) 调用建立与服务器的连接 对于大多数面向连接的协议(如TCP协议),connect( )系统调用将在客户进程和服务器进程之间建立一条传输连接(如TCP连接),connect( ) 调用要等到系统将传输连接建立完后才返回,否则将返回出错信息。,connect( )的调用格式,connect(sockid,destaddr,addrlen ) 其中参数意义如下 sockid,本地socket号。 destaddr,是一个指向服务器的socket地址(信宿地址)结构的指针 addr1en,信宿方socket地址长度,4. 接收连接建立请求listen( )和accept( ),面向连接的服务器进程一般在某个众所周知的端口上接收客户进程的连接建立请求。服务器进程平时处于睡眠状态,一旦有连接建立请求来到时,服务器进程被唤醒并处理客户进程的连接建立请求。 面向连接的服务器进程通过listen( )和accept( ) 系统调用来接收并处理客户进程的连接建立请求。 1isten( )系统调用表明服务器进程愿意接收客户进程的连接请求。 accept( )系统调用用于服务器进程处理客户进程的连接建立请求。,1isten( )系统调用,listen( )一般在accept( )之前调用,其调用格式为: listen(sockid,quelen) 其中: sockid,本地socket号,服务器进程在此socket地址上接收连接建立请求。 quelen,连接建立请求队列长度。listen( )系统调用以此参数限制连接请求的排队个数,通常允许的连接请求排队长度最大值为5。,accept( )系统调用(1),accept( )系统调用用于服务器进程处理客户进程的连接请求,其调用格式如下: newsock = accept(sockid,clientaddr,addrlen) 其中各个调用参数意义如下: sockid,本地socket号。 clientaddr,指向客户socket地址结构的指针。 addrlen,客户socket地址长度。,accept( )系统调用(2),clientaddr指向一个初始值为空的地址结构,当accept( )调用返回后,客户进程的socket地址被填入该地址结构中。 addrlen的初始值为0,accept( )调用返回后保存了客户进程socket地址的长度。,newsock,在并发服务器处理方式中,主服务器进程将fork一个子进程(即从服务器),从服务器子进程通过新socket号(newsock)引用socket来真正处理客户进程的请求(数据或撤销连接请求)。主服务器进程继续通过原来的sockid来引用socket处理其他客户进程的连接建立请求。 当newsock的值小于0时,表明accept( )调用出错。,利用accept( )建立并发服务器,5发送数据,send( ) 、write( )和writev( ) 用于面向连接的数据发送,面向连接的数据发送系统调用中可以不必指定接收方socket地址;例如 send(sockid,buf,buflen,flags) sendto( )和sendmsg( )用于无连接的数据发送,无连接的数据发送系统调用必须明确指定接收方的socket地址 sendto(sockid,buf,buflen,flags,destadd,addrlen),6接收数据,接收数据系统调用与发送数据系统调用是一一对应的。 面向连接的数据接收 recv(sockid,buf,buflen,flags) 无连接的数据发送 recvfrom(sockid,buf,buflen,flags,suradd,addrlen),面向连接客户/服务器模型时序图,说明,同步是客户/服务器模型实现中的一个重要问题,socket系统调用很好地解决了这个问题。 服务器进程必须首先启动,等待服务器进程执行完accept( )调用,服务器进程阻塞并等待客户发出连接建立请求。 假如客户进程比服务器进程先启动,则它发出的connect( )系统调用将返回出错代码,连接建立不成功。,无连接客户/服务器模型时序图,说明,那么无连接socket是如何实现彼此通信的。 在服务器一端,无连接服务器进程通过socket( )和bind( )建立了本地半相关;而在客户机一端,无连接客户进程通过调用bind( )也建立了一个本地半相关。 在发送数据过程中,发送方指定本地socket地址和信宿端socket地址,于是,一个完整的相关在数据发送和接收过程中动态地建立起来,实现了无连接客户进程和服务器进程彼此之间的通信。,Server的实现机制,并发服务器(concurrent server)方式 主服务器处于侦听状态,一旦客户进程有连接建立请求,主服务器立即被唤醒并处理该客户的连接建立请求,然后fork一个子进程(从服务器)来处理客户的数据请求,而主服务器进程回到侦听状态以响应其他客户的连接建立请求。 重复服务器(iterative server)方式 采用重复服务器技术的系统内包含一个客户请求队列,当有客户请求到达服务器后,首先将请求排队,然后重复服务器按FIFO原则对请求作出响应。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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