<sys/types.h>
基本系统数据类型
是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型。
<sys/socket.h>
声明了各种socket方法,包括socket(),bind(),connect(),send()等等。
<netinet/in.h>互联网地址族
struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。
struct sockaddr {
unsigned short sa_family; /* 地址族, AF_xxx */
char sa_data[14]; /* 14字节的协议地址*/
};
上面是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换
struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr; /* Internet地址 */
unsigned char sin_zero[8]; /* 与struct sockaddr一样的长度 */
};
struct in_addr就是32位IP地址。
struct in_addr {
unsigned long s_addr;
};
<arpa/inet.h>
各种地址类型的转换
1、处理器字节序与网络字节序之间的转换
htonl,htons,ntohl,ntohs四种方法(l表示long,32位;s表示short,16位)
2、二进制地址格式与点分十进制地址格式之间的转换
inet_addr和inet_ntoa只能用于IPV4
inet_ntop和inet_pton支持IPV4与IPV6
inet_ntop将网络字节序的二进制地址转换成文本字符串格式;inet_pton将文本字符串格式转换成网络字节序的二进制地址格式