- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
演示文稿演讲PPT学习教学课件医学文件教学培训课件
第2章 基于TCP套接字的编程 ;2.1 概述; 在UNIX系统中,网络应用编程界面有两类:UNIX?BSD的套接字(socket)和UNIX?System?V的TLI。由于Sun公司采用了支持TCP/IP的UNIX?BSD操作系统,使TCP/IP的应用有更大的发展,其网络应用编程接口──套接字在网络软件中也被广泛应用,至今已引进到Linux和Windows系统中,成为开发网络应用软件的强有力工具,本章将详细讨论套接字的使用。
Linux产生时,UNIX系统的网络功能已经相当成熟了,Linux网络的开发者选择了重新开发网络功能。在Linux网络代码开发的过程中,很多程序员做出了贡献。它提供的套接字有三种类型:流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)及原始套接字(SOCK_RAW)。下面将详细介绍这些套接字的定义与应用。;2.2 套接字和套接字地址 ; Linux支持多种类型的套接字,也叫做套接字寻址簇,这是因为每种类型的套接字都有自己的寻址方法。Linux支持以下的套接字类型:
UNIX UNIX域套接字
INET Internet地址簇CP/IP协议支持通信
IPX Novell IPX
APPLETALK Appletalk DDP
X25 X25
这些类型的套接字代表各种不同的连接服务。; Linux的BSD 套接字支持下面的几种套接字类型:
(1) 流式(stream)。这种套接字提供了可靠的双向顺序数据流连接。它可以保证数据传输中的完整性、正确性和单一性。INET寻址簇中的TCP协议支持这种类型的套接字。
(2) 数据报(datagram)。这种类型的套接字也可以像流式套接字一样提供双向的数据传输,但它们不能保证传输的数据一定能够到达目的节点,也无法保证到达数据以正确的顺序到达以及数据的单一性、正确性。UDP协议支持这种类型的套接字。
(3) 原始(raw)。这种类型的套接字允许进程直接存取下层的协议。
(4) 可靠递送消息(reliable delivered messages)。这种套接字和数据报套接字一样,只能保证数据的到达。; (5) 顺序数据包(sequenced packets)。这种套接字和流式套接字相同,但是它的数据包的大小是固定的。
(6) 数据包(packet)。这不是标准的BSD套接字类型,而是Linux中的一种扩展。它允许进程直接存取设备层的数据包。
套接字的特点:
(1) 套接字没有与???相连的设备文件。应用程序可以用scoket()产生套接字,指定所用的信道类型。scoket()返回与所用信道末端相适应的文件描述符。
(2) 只要进程保存文件描述符,套接字就一直存在,直到没有进程打开文件描述符为止,套接字才被撤消。; (3) 可以产生一个套接字,也可以同时产生一对套接字。如果产生一对套接字,则操作系统会自动在它们之间建立信道。如果只产生一个套接字,则用户程序就需要用套接字函数在该套接字与其他套接字间建立信道。
因此,socket是一个工具,或者说是一种不可见控件,应用程序可以通过socket函数,来访问底层网络协议。
; 2.2.2 套接字地址
套接字接口利用传送提供者进行工作,不同的传送提供者有不同的地址,套接字接口允许指定任意类型的地址。
Linux系统的套接字是一个通用的网络编程接口,它支持多种协议,每一种协议使用不同的套接字地址结构。Linux系统定义了一种通用的套接字地址结构,可以保持套接字函数调用参数的一致性。如下所示:
struct sockaddr
{
unsigned short sa_family; /* 地址类型,AF_xxx */
char sa_data[14]; /* 协议地址 */
};; 其中:
sa_family:保存协议标识符。
AF_INET:代表TCP/IP协议簇。
sa_data:保存具体的协议地址。
TCP/IP协议簇的套接字地址也可以采用如下结构:
#include netinet /in.h
#includesys/socket.h; struct in_addr
{
_u32 s_addr;
/* ?UINT类型 */
}
struct sockaddr_in
{
short int sin_family;
/* 地址类型:AF_XXX */
您可能关注的文档
- (精选)市场调查与预测项目15运用移动平均预测法课件.ppt
- (精选)市场调查与预测项目16运用季节预测法课件.ppt
- (精选)市场调查与预测项目17一元线性回归预测课件.ppt
- (精选)市场调查与预测项目18运用马尔科夫预测法课件.ppt
- (精选)市场营销策划 任务8 营销创新新理念课件.ppt
- (精选)市场营销策划项目1 市场营销策划概论课件.ppt
- (精选)市场营销策划项目2 市场营销策划环境分析课件.ppt
- (精选)市场营销策划项目3 产品策划课件.ppt
- (精选)市场营销策划项目4 品牌策划课件.ppt
- (精选)市场营销策划项目5 广告策划课件.ppt
- (精选)网络应用程序设计(方敏 西电版)第3章 UDP套接字与原始套接字的编程课件.ppt
- (精选)网络应用程序设计(方敏 西电版)第4章 进程与信号机制课件.ppt
- (精选)网络应用程序设计(方敏 西电版)第5章 进程间通信及实现方法课件.ppt
- (精选)网络应用程序设计(方敏 西电版)第6章 带外数据课件.ppt
- (精选)网络应用程序设计(方敏 西电版)第7章 阻塞式非阻塞式课件.ppt
- (精选)网络应用程序设计(方敏 西电版)第8章 Windows网络编程课件.ppt
- (精选)网络应用程序设计(方敏 西电版)第10章 网络数据库的访问与应用课件.ppt
- (精选)网络应用基础课件.ppt
- (精选)网络游戏运营教程课件.ppt
- (精选)网络与信息安全测评 课件课件.ppt
文档评论(0)