ClinetServer模型和Socket编程接口.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十二章 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. 创建socket-socket( ) 创建socket的系统调用是socket( ),其调用格式如下 sockid=socket(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( )之前调用,

文档评论(0)

duoduoyun + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档