- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux下Socket编程详解
Linux下 Socket编程
网络的 Socket 数据传输是一种特殊的 I/O,Socket 也是一种文件描述符。Socket 也
具有一个类似于打开文件的函数调用 Socket(),该函数返回一个整型的 Socket 描述符,随
后的连接建立、数据传输等操作都是通过该 Socket 实现的。
什么是 Socket
Socket 接口是 TCP/IP 网络的 API,Socket 接口定义了许多函数或例程,程序员可以
用它们来开发 TCP/IP 网络上的应用程序。要学 Internet 上的 TCP/IP 网络编程,必须理解
Socket 接口。
Socket 接口设计者最先是将接口放在 Unix 操作系统里面的。如果了解 Unix 系统的
输入和输出的话,就很容易了解 Socket 了。网络的 Socket 数据传输是一种特殊的 I/O,
Socket 也是一种文件描述符。Socket 也具有一个类似于打开文件的函数调用 Socket(),该
函数返 回一个整型的 Socket 描述符,随后的连接建立、数据传输等操作都是通过该 Socket
实现的。常用的 Socket 类型有两种:流式 Socket (SOCK_STREAM)和数据报式 Socket
(SOCK_DGRAM)。流式是一种面向连接的 Socket,针对于面向连接的 TCP 服务应用;
数据 报式 Socket 是一种无连接的 Socket,对应于无连接的 UDP 服务应用。
Socket建立
为了建立 Socket,程序可以调用 Socket 函数,该函数返回一个类似于文件描述符的
句柄。socket 函数原型为:
int socket(int domain, int type, int protocol);
domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);
type 参数指定 socket 的类型: SOCK_STREAM 或 SOCK_DGRAM,Socket 接口还定义
了原始 Socket(SOCK_RAW),允许程序使用低层协议;protocol 通常赋值0。 Socket()
调用返回一个整型 socket 描述符,你可以在后面的调用使用它。
Socket 描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用 Socket
函数时,socket 执行体将建立一个 Socket,实际上建立一个 Socket意味着为一个 Socket
数据结构分配存储空间。Socket 执行体为你管理描述符表。
两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机
端口、远端主机地址和远端协议端口。Socket 数据结构中包含这五种信息。
Socket配置
通过 socket 调用返回一个 socket 描述符后,在使用 socket 进行网络传输以前,必须
配置该 socket。面向连接的 socket 客户端通过 调用 Connect 函数在 socket 数据结构中保
存本地和远端信息。无连接 socket 的客户端和服务端以及面向连接 socket 的服务端通过调
用 bind 函数来配置本地信息。
Bind 函数将 socket 与本机上的一个端口相关联,随后你就可以在该端口监听服务请求。Bind
函数原型为:
int bind(int sockfd,struct sockaddr *my_addr, int addrlen);
Sockfd 是调用 socket 函数返回的 socket 描述符,my_addr 是一个指向包含有本机 IP
地址及端口号等信息的 sockaddr类型的指针;addrlen常被设置为sizeof(struct sockaddr)。
struct sockaddr 结构类型是用来保存 socket 信息的:
struct sockaddr {
unsigned short sa_family; /* 地址族, AF_xxx */
char sa_data[14]; /* 14 字节的协议地址 */
};
sa_family 一般为 AF_INET,代表 Internet(TCP/IP)地址族;sa_data 则包含该 socket
的 IP 地址和端口号。
另外还有一种结构类型:
struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */
您可能关注的文档
- HST Stellar Standards with 1% Accuracy in Absolute Flux.pdf
- HSV在肿瘤治疗中的优势.pdf
- HUAWEI ME909 Series LTE LGA Module Brief Hardware Guide_V0.2.pdf
- Human being is a living random number generator.pdf
- Human Effort and Machine Learnability in Computer Aided Translation.pdf
- Human IL-12(P70)ELISA Kit说明书.pdf
- human_muscle_stem_cell.pdf
- Hybrid hot strip rolling force prediction using a bayesian trained artificial neural networ.pdf
- Hydraulic Fluid Sample of Green, Blue and Yellow Systems for Analysis of A320.pdf
- Hydrogen breath test of lactose absorption.pdf
文档评论(0)