网站大量收购独家精品文档,联系QQ:2885784924

第四讲_套接字API技术报告.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四讲 套接字API 电子科技大学计算机学院 什么是套接字 TCP/IP协议存在于OS中,网络服务通过OS提供 在OS中增加支持TCP/IP的系统调用——Berkeley套接字 如Socket,Connect,Send,Recv等 1981提出于BSD4.1 UNIX,本书基于BSD4.4 版本 什么是套接字 套接字API 来自UNIX系统 Berkeley套接字 ARPA要求伯克利分校将TCP/IP移植到UNIX中 需要创建一个接口,便于应用程序使用这个接口 进行网络通信 尽可能使用现有的系统调用,同时添加新的系统调用支持TCP/IP。 这个系统被称为BSD UNIX 套接字,成为事实上的标准 指明一个协议接口 考虑:接口是专门针对TCP/IP, 还是可以为其它协议所用呢? 方法一:定义专门支持TCP/IP通信的一些函数 方法二:定义支持一般网络通信的函数,用参数是TCP/IP通信作为一种特例 Berkeley套接字使用第二种办法,具有通用性,TCP/IP是一个族PF_INET 使用服务的类型,而不是指定协议名 争论: 通用性没有必要,使应用程序难以阅读 通用性可以使程序员免于了解协议族的细节 套接字:描述符 OS将文件描述符实现为一个指针数组,指向一个内部的数据结构:进程描述符表的下标 套接字和文件类似,每个活动套接字使用一个小整数标识,进程的文件描述符和套接字描述符值不能相同 socket函数:创建套接字描述符(不是open函数) 针对套接字的系统数据结构 调用socket将创建一个新的描述符条目 结构的许多字段是其他的系统调用来填 主动套接字和被动套接字 创建方式相同,使用方式不同 等待传入连接的套接字——被动,如服务器套接字 发起连接的套接字——主动,如客户套接字 指明端点地址:创建时不指定,使用时指明 TCP/IP需要指明协议端口号和IP地址 TCP/IP协议族:PF_INET TCP/IP的地址族:AF_INET 类属地址结构 套接字系统定义的一般化的地址结构 (地址族,该族的端点地址) 套接字API的主要系统调用 套接字调用分为两组: 主调用:提供下层功能的访问 实用例程:提供帮助 套接字带有参数,允许以多种方式来使用它们。 可被客户或服务器使用 可被TCP或UDP使用 可使用特定或非特定的远程端点地址 一些主调用的套接字API: int Socket( int domain, int type, int protocol) 功能:创建一个新的套接字,返回套接字描述符 参数说明: domain:域类型,指明使用的协议栈,如TCP/IP使用的是 PF_INET type: 指明需要的服务类型, 如 SOCK_DGRAM: 数据报服务,UDP协议 SOCK_STREAM: 流服务,TCP协议 protocol:一般都取0(因为已经指定了服务类型) 举例:s=socket(PF_INET,SOCK_STREAM,0) int bind(int sockfd,struct sockaddr * my_addr,int addrlen) 功能:为套接字指明一个本地端点地址 TCP/IP协议使用sockaddr_in结构,包含IP地址和端口号 服务器使用它来指明熟知的端口号,然后等待连接 参数说明: Sockfd:套接字描述符,指明创建连接的套接字 my_addr:本地地址,IP地址和端口号 addrlen :地址长度 举例:bind(sockfd, (struct sockaddr *)address, sizeof(address)); int listen(int sockfd,int input_queue_size) 功能: 面向连接的套接字使用它将一个套接字置为被动模 式,并准备接收传入连接。用于服务器,指明某个 套接字连接是被动的 参数说明: Sockfd:套接字描述符,指明创建连接的套接字 input_queue_size:该套接字使用的队列长度,指定在请求队列中允许的最大请求数 举例:listen(sockfd,20) int accept(int sockfd, struct sockaddr *addr, int *addrlen); 功能:获取传入连接请求,返回新的连接的套接字描述符。 为每个新的连接请求创建了一个新的套接字,服务器只对新的连接使用该套接字,原来的监听套接字接受其他的连接请求。 新的连接上传输数据使用新的套接字,使用完毕,服务器将关闭这个套接字。 参数说明: Sockfd:套接字描述符,指明正在监听的套接字 addr:提出连接请求的主机地址 addrlen:地址长度 举例:new_sockfd = accept(sockfd, (struct s

文档评论(0)

x5511167 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档