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

linux套接字编程.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Unix Network Programming 第三章 套接字 套接字是一种网络API(应用程序编程接口)。它定义了许多函数和例程,程序员可以用它开发网络应用程序。套接字接口本意在于提供一种进程间通信的方法,使得在相同或不同主机上的进程能以相同的规范进行双向信息传送。 进程通过调用套接字接口API来实现相互之间的通信。套接字接口又利用下层的网络通信协议功能和系统调用实现实际的通信工作。 本章内容 3.1 套接字类型 3.2 套接字地址结构 3.3 位顺序调整 3.4 带外数据 3.5 连接类型 3.6 TCP套接字 3.7 UDP套接字 3.8 小结 3.1 套接字类型 套接字支持各种通信域,即多种不同的通信协议。目前UNIX系统主要支持以下几种协议: UNIX:UNIX系统内部协议 INET: IP版本4 INET6: IP版本6 UNIX系统支持多种套接字类型。套接字类型:是指创建套接字的应用程序所希望的通信服务类型。目前,UNIX系统主要定义如下: SOCK_STREAM:提供可靠的面向连接传输的数据流,保证数据在传输过程中无丢失、无损坏和无冗余。INET地址簇中的TCP协议支持该套接字。 SOCK_DGRAM:提供数据的双向传输,但不保证消息地准确到达,即使消息能够到达,也无法保证其顺序性,并可能有冗余或损坏。INET地址簇中的UDP协议支持该套接字。 SOCK_RAM:是低于传输层的低级协议或物理网络提供的套接字类型。它可以访问内部网络接口。例如,可以接收和发送ICMP报。 SOCK_SEQPACKET:提供可靠的、双向的、顺序化的以及面向连接的数据通信。类似于STREAM方式,但它的报文大小可变(最大报文长度固定)。 SOCK_RDM:类似于SOCK_DGRAM,但它可保证数据的正确到达。 3.2 套接字地址结构 多数套接字函数需要一个指向地址结构的参数。对应于不同的协议簇,有不同的地址结构。在头文件linux/socket.h中定义了以下结构来保持套接字函数调用参数的一致性。 struct sockaddr{ unsigned short sa_family; /* 地址类型,格式为AF_XXX */ char sa_data[14]; /* 14字节的协议地址 */ }; 其中的sa_family为套接字的协议簇地址类型,TCP/IP的协议对于IPv4地址类型为AF_INET。sa_data中存储具体的协议地址,不同的协议簇有不同的地址格式。 但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构sockaddr_in (在netinet/in.h中定义): struct sockaddr_in{ unsigned short int sin_len; /* IPv4地址长度 */ short int sin_family; /* 地址类型 */ unsigned short int sin_port; /* 存储端口号 */ struct in_addr sin_addr; /*存储IP地址 */ unsigned char sin_zero[8]; /* 空字节 */ }; 在编程中大多数是使用sockaddr_in这个结构来设置/获取地址信息。 在IPv6中套接字地址结构采用另外的定义: #DEFINE SIN6_LEN /* 如果系统支持套接字地址结构中的长度成员,则此常值必须定义*/ struct sockaddr_in6{ unsigned short int sin6_len; /*IPv6结构体长度 */ short int sin6_family; /*地址类型 */ unsigned short int sin6_port; /*存储端口号,网络字节顺序*/ unsigned short int sin6_flowinfo; /*优先级和流量标志,网络字节顺序 */ struct in6_addr sin6_addr; /*IPv6地址,网络字节顺序*/ }; struct in6_addr{ unsigned long s6_addr; /*128位IPv6地址,网络字节顺序*/ }; 比较IPv4和IPv6的地址结构 设置地址信息的实例(IPv4) struct sockaddr_in mysock; /*设置sockaddr_in的结构体变量mysock */ mysock.sin_family=AF_INET; /*TCP地址结构*/ mysock.sin_port=htons(3490); /*short,NBO*/ mysock.sin_addr.s_addr=i

文档评论(0)

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

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

1亿VIP精品文档

相关文档