- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四讲 套接字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) 一些主调用的套接字API: int Connect(int sockfd,struct sockaddr *server_addr,int sockaddr_len) 功能: 同远程服务器建立主动连接,成功时返回0,若连接失败返回-1。 参数说明: Sockfd:套接字描述符,指明创建连接的套接字 Server_addr:指明远程端点:IP地址和端口号 sockaddr_len :地址长度 举例(P49): connect(s,remaddr,remaddrlen) int Send(int sockfd, const void * data, int data_len, unsigned int flags) 功能: 在TCP连接上发送数据,返回成功传送数据的长度,出错时返回-1。 send会将外发数据复制到OS内核中,也可以使用send发送面向连接的UDP报文。 参数说明: sockfd:套接字描述符 data:指向要发送数据的指针 data_len:数据长度 flags:一直为0 举例(p50):send(s,req,strlen(req),0); int Sendto(int sockfd, const void * data, int data_len, unsigned int flags, struct sockaddr *remaddr,int remaddr_len) 功能:基于UDP发送数据报,返回实际发送的数据长度,出错时返回-1 参数说明: sockfd:套接字描述符 data:指向要发送数据的指针 data_len:数据长度 flags:一直为0 remaddr:远端地址:IP地址和端口号 remaddr_len :地址长度 举例:sendto(sockfd,buf,sizeo
您可能关注的文档
最近下载
- 三年级上册数学应用题专项训练.pdf VIP
- 现代幼儿教师实用英语口语 (10)字母教学.pptx VIP
- 1.2.3多细胞生物教学设计 (表格式)苏教版生物七年级上册.docx VIP
- 《生物化学》考研查锡良版2025年配套名校考研真题库.pdf VIP
- 110KV升压站工程施工组织设计.pdf VIP
- 高职院校产教融合、校企合作项目质量评价体系构建的探索.docx VIP
- 2025年山东省公安机关公务员录用考试模拟试卷.docx VIP
- 2025北京师范大学校医院事业编医生岗招聘2人笔试模拟试题及答案解析.docx VIP
- 2025ADA血糖管理指南解读.pptx VIP
- 音乐鉴赏:音乐基础知识PPT教学课件.pptx VIP
原创力文档


文档评论(0)