欢迎来到天天文库
浏览记录
ID:45088796
大小:451.00 KB
页数:44页
时间:2019-11-09
《《linux套接字编程》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第三章套接字套接字是一种网络API(应用程序编程接口)。它定义了许多函数和例程,程序员可以用它开发网络应用程序。套接字接口本意在于提供一种进程间通信的方法,使得在相同或不同主机上的进程能以相同的规范进行双向信息传送。进程通过调用套接字接口API来实现相互之间的通信。套接字接口又利用下层的网络通信协议功能和系统调用实现实际的通信工作。进程通信与套接字接口2processTCPwithbuffers,variablessocket由应用程序开发者控制由操作系统控制hostorserverprocessTCPwithbuffers,variablessocketcontrolle
2、dbyapplicationdevelopercontrolledbyoperatingsystemhostorserverinternet1.套接字是一个主机本地应用程序所创建的,为操作系统所控制的接口(“门”).2.应用进程通过这个接口,使用传输层提供的服务,跨网络发送(/接收)消息到(/从)其他应用进程。3.Client/server模式的通信接口——套接字接口.3本章内容3.1套接字类型3.2套接字地址结构3.3位顺序调整3.4带外数据3.5连接类型3.6TCP套接字3.7UDP套接字3.8小结43.1套接字类型套接字支持各种通信域,即多种不同的通信协议。目前UNI
3、X系统主要支持以下几种协议:UNIX:UNIX系统内部协议INET:IP版本4INET6:IP版本65UNIX系统支持多种套接字类型。套接字类型:是指创建套接字的应用程序所希望的通信服务类型。目前,UNIX系统主要定义如下:SOCK_STREAM:提供可靠的面向连接传输的数据流,保证数据在传输过程中无丢失、无损坏和无冗余。INET地址簇中的TCP协议支持该套接字。SOCK_DGRAM:提供数据的双向传输,但不保证消息地准确到达,即使消息能够到达,也无法保证其顺序性,并可能有冗余或损坏。INET地址簇中的UDP协议支持该套接字。SOCK_RAM:是低于传输层的低级协议或物理网
4、络提供的套接字类型。它可以访问内部网络接口。例如,可以接收和发送ICMP报。SOCK_SEQPACKET:提供可靠的、双向的、顺序化的以及面向连接的数据通信。类似于STREAM方式,但它的报文大小可变(最大报文长度固定)。SOCK_RDM:类似于SOCK_DGRAM,但它可保证数据的正确到达。63.2套接字地址结构多数套接字函数需要一个指向地址结构的参数。对应于不同的协议簇,有不同的地址结构。在头文件中定义了以下结构来保持套接字函数调用参数的一致性。structsockaddr{unsignedshortsa_family;/*地址类型,格式
5、为AF_XXX*/charsa_data[14];/*14字节的协议地址*/};其中的sa_family为套接字的协议簇地址类型,TCP/IP的协议对于IPv4地址类型为AF_INET。sa_data中存储具体的协议地址,不同的协议簇有不同的地址格式。7但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构sockaddr_in(在netinet/in.h中定义):structsockaddr_in{unsignedshortintsin_len;/*IPv4地址长度*/shortintsin_family;/*地址类型*/unsigneds
6、hortintsin_port;/*存储端口号*/structin_addrsin_addr;/*存储IP地址*/unsignedcharsin_zero[8];/*空字节*/};在编程中大多数是使用sockaddr_in这个结构来设置/获取地址信息。sin_family指代协议族,在TCP套接字编程中只能是AF_INET;sin_port存储端口号(使用网络字节顺序),数据类型是一个16位的无符号整数类型;sin_addr存储IP地址,IP地址使用in_addr这个数据结构:structin_addr{unsignedlongs_addr;};这个数据结构是由于历史原因保
7、留下来,主要用作与以前的格式兼容。这里的s_addr按照网络字节顺序存储IP地址。sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。8在IPv6中套接字地址结构采用另外的定义:#DEFINESIN6_LEN/*如果系统支持套接字地址结构中的长度成员,则此常值必须定义*/structsockaddr_in6{unsignedshortintsin6_len;/*IPv6结构体长度*/shortintsin6_family;/*地址类型*/unsignedshort
此文档下载收益归作者所有