2024年3月22日发(作者:)

网络的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