ClinetServer模型与Socket编程接口.ppt

上传人:牧羊曲112 文档编号:5421900 上传时间:2023-07-05 格式:PPT 页数:23 大小:232.49KB
返回 下载 相关 举报
ClinetServer模型与Socket编程接口.ppt_第1页
第1页 / 共23页
ClinetServer模型与Socket编程接口.ppt_第2页
第2页 / 共23页
ClinetServer模型与Socket编程接口.ppt_第3页
第3页 / 共23页
ClinetServer模型与Socket编程接口.ppt_第4页
第4页 / 共23页
ClinetServer模型与Socket编程接口.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《ClinetServer模型与Socket编程接口.ppt》由会员分享,可在线阅读,更多相关《ClinetServer模型与Socket编程接口.ppt(23页珍藏版)》请在三一办公上搜索。

1、第十二章 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)来标识;但在网络环境下,不能用进程号来唯

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

3、进程在通信之前,必须首先各自创建一个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

4、()&recvfrom(),1.创建socketsocket(),创建socket的系统调用是socket(),其调用格式如下sockidsocket(af,type,protocol)返回值sockid是一个整数,即socket号,创建一个socket实际上是向系统申请一个属于自己的socket号socket()系统调用的三个参数AF(Address Family)TypeProtocol,2.指定本地地址bind(),bind()系统调用是将本地socket地址(包括本地主机地址和本地端口)与所创建的socket号联系起来,即将本地socket地址赋予该socket。bind()的调用格式

5、为 bind(sockid,localaddr,addrlen)其中,sockid,已获得的socket号。localaddr,本地socket地址:包括本地主机地址和端口号。addrlen,本地socket地址长度,表示以字节为单位的本地socket地址结构的长度。,3.请求建立连接connect(),面向连接的客户进程通过connect()调用建立与服务器的连接对于大多数面向连接的协议(如TCP协议),connect()系统调用将在客户进程和服务器进程之间建立一条传输连接(如TCP连接),connect()调用要等到系统将传输连接建立完后才返回,否则将返回出错信息。,connect()的调

6、用格式,connect(sockid,destaddr,addrlen)其中参数意义如下sockid,本地socket号。destaddr,是一个指向服务器的socket地址(信宿地址)结构的指针addr1en,信宿方socket地址长度,4.接收连接建立请求listen()和accept(),面向连接的服务器进程一般在某个众所周知的端口上接收客户进程的连接建立请求。服务器进程平时处于睡眠状态,一旦有连接建立请求来到时,服务器进程被唤醒并处理客户进程的连接建立请求。面向连接的服务器进程通过listen()和accept()系统调用来接收并处理客户进程的连接建立请求。1isten()系统调用表明

7、服务器进程愿意接收客户进程的连接请求。accept()系统调用用于服务器进程处理客户进程的连接建立请求。,1isten()系统调用,listen()一般在accept()之前调用,其调用格式为:listen(sockid,quelen)其中:sockid,本地socket号,服务器进程在此socket地址上接收连接建立请求。quelen,连接建立请求队列长度。listen()系统调用以此参数限制连接请求的排队个数,通常允许的连接请求排队长度最大值为5。,accept()系统调用(1),accept()系统调用用于服务器进程处理客户进程的连接请求,其调用格式如下:newsock=accept(s

8、ockid,clientaddr,addrlen)其中各个调用参数意义如下:sockid,本地socket号。clientaddr,指向客户socket地址结构的指针。addrlen,客户socket地址长度。,accept()系统调用(2),clientaddr指向一个初始值为空的地址结构,当accept()调用返回后,客户进程的socket地址被填入该地址结构中。addrlen的初始值为0,accept()调用返回后保存了客户进程socket地址的长度。,newsock,在并发服务器处理方式中,主服务器进程将fork一个子进程(即从服务器),从服务器子进程通过新socket号(newsoc

9、k)引用socket来真正处理客户进程的请求(数据或撤销连接请求)。主服务器进程继续通过原来的sockid来引用socket处理其他客户进程的连接建立请求。当newsock的值小于0时,表明accept()调用出错。,利用accept()建立并发服务器,5发送数据,send()、write()和writev()用于面向连接的数据发送,面向连接的数据发送系统调用中可以不必指定接收方socket地址;例如send(sockid,buf,buflen,flags)sendto()和sendmsg()用于无连接的数据发送,无连接的数据发送系统调用必须明确指定接收方的socket地址sendto(soc

10、kid,buf,buflen,flags,destadd,addrlen),6接收数据,接收数据系统调用与发送数据系统调用是一一对应的。面向连接的数据接收recv(sockid,buf,buflen,flags)无连接的数据发送recvfrom(sockid,buf,buflen,flags,suradd,addrlen),面向连接客户/服务器模型时序图,说明,同步是客户/服务器模型实现中的一个重要问题,socket系统调用很好地解决了这个问题。服务器进程必须首先启动,等待服务器进程执行完accept()调用,服务器进程阻塞并等待客户发出连接建立请求。假如客户进程比服务器进程先启动,则它发出的

11、connect()系统调用将返回出错代码,连接建立不成功。,无连接客户/服务器模型时序图,说明,那么无连接socket是如何实现彼此通信的。在服务器一端,无连接服务器进程通过socket()和bind()建立了本地半相关;而在客户机一端,无连接客户进程通过调用bind()也建立了一个本地半相关。在发送数据过程中,发送方指定本地socket地址和信宿端socket地址,于是,一个完整的相关在数据发送和接收过程中动态地建立起来,实现了无连接客户进程和服务器进程彼此之间的通信。,Server的实现机制,并发服务器(concurrent server)方式主服务器处于侦听状态,一旦客户进程有连接建立请求,主服务器立即被唤醒并处理该客户的连接建立请求,然后fork一个子进程(从服务器)来处理客户的数据请求,而主服务器进程回到侦听状态以响应其他客户的连接建立请求。重复服务器(iterative server)方式采用重复服务器技术的系统内包含一个客户请求队列,当有客户请求到达服务器后,首先将请求排队,然后重复服务器按FIFO原则对请求作出响应。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号