第二章 插口API简介.pptVIP

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

第二章 插口API简介 2-1 概述 插口API是最常用的网络应用编程接口。本章主要介绍: 插口API中的基本概念和数据结构 基本插口函数 插口I/O函数 插口选项函数 其他处理函数 2-2 端口和插口 端口 端口是一种抽象的软件结构,包括一些数据结构和I/O缓冲区。应用程序即进程通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都从该端口输出。 网络中可以被命名和寻址的通信端口是操作系统可分配的一种资源。按照OSI七层协议的描述,传输层与网络层最大的区别是传输层提供进程通信能力。 网络通信的最终地址不仅是主机地址,还包括可以描述进程的某种标识。为此TCP/IP协议提出了协议端口的概念,用于标识通信的进程。 在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问。类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,以区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是两个完全独立的软件模块,因此各自的端口号也相互独立。 端口号分为两类:保留端口(1-1023)和一般端口(1024-65535) 保留端口:这类端口是专门分配给一些最常用的应用层程序的。例如:UDP协议中,RPC(111),SNMP(161,162),TFTP(69);TCP协议中,SMTP(25),FTP(21,22),TELNET(23) 一般端口:只要不发生使用冲突,任何应用进程均可分配使用。 插口 只用端口号是不能标识客户和服务器之间的通信连接。 主机的IP地址和端口号结合起来就是插口。 每一个插口是一个二元组(IP地址,端口号)。一对插口即可标识一条连接,它是一个四元组:(本地IP地址,本地端口,远程IP地址,远程端口) 在整个Internet中,在传输层通信的一对插口必须是唯一的。 一个完整的网间进程通信需要有两个进程组成,并且只能使用同一种高层协议。也就是说TCP和UDP没法通信。因此一个完整的网间进程通信需要一个五元组来标识:(协议,本机地址,本地端口号,远地地址,远地端口号)这样一个五元组叫做一个全相关。 2-3 基本数据结构 IP中,计算机都分配有一个IP地址,用一个4字节数来表示。 客户机通过TCP或UDP和服务器通信时,必须指定服务器的IP地址和端口号。 服务器打算监听接入客户机请求时,也必须指定一个IP地址和一个端口号。 Winsock中,应用通过sockaddr_in结构来指定IP地址和端口信息,该结构的格式如下: struct sockaddr_in { unsigned short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; } 参数: sin_family字段必须设为AF_INET ,以告知Winsock我们此时正在使用IP地址家族; sin_port字段定义准备使用哪个TCP或UDP通信端口来标识服务器服务. sin_addr 字段用于把一个I P 地址保存为一个4 字节的数,它是无符号长整数类型。 sin_ zero只充当填充项的职责,以使sockaddr_in 结构和sockaddr 结构的长度一 样。 注意:成员sin_port和sin_addr应总是以网络字节顺序而不是主机字节顺序来存储。 其中结构体in_addr定义如下: struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; }; 我们演示一下如何使用sockaddr_in结构: sockaddr_in ServerAddr; ServerAddr.sin_family=AF_INET; ServerAddr.sin_port=htons(5050); ServerAddr.sin_addr.s_addr=inet_addr(); 其中: 函数htons将一个u_short类型数(16bit无符号整数)从主机字节顺序转换成TCP/IP网络字节顺序; 函数inet_addr将一个用点分表示法表示的字符串地址转换成网际地址in_addr形式。 2-4 winsock的启动与终止 对于所有在windows socke

文档评论(0)

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

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

1亿VIP精品文档

相关文档