#include <arpa/inet.h>
是一个 C 语言标准库头文件。
位于 POSIX 标准库中,用于网络编程。它包含了一些函数原型和定义,用于处理 IP 地址的转换和操作。
<arpa/inet.h>
头文件提供了以下函数:
IP 地址转换函数:inet_addr()
、inet_lnaof()
、inet_makeaddr()
、inet_netof()
、inet_network()
、inet_ntoa()
、inet_pton()
、inet_ntop()
。
1、inet_addr()
原型为
in_addr_t inet_addr (const char *__cp)
转换互联网主机地址从数字和点符号在CP转换成网络字节顺序的二进制数据。
2、inet_lnaof()
原型为
in_addr_t inet_lnaof (struct in_addr __in);
返回Internet地址的本地主机地址部分。
3、inet_makeaddr()
原型为
struct in_addr inet_makeaddr (in_addr_t __net, in_addr_t __host)
将网络号NET与本地地址host结合,使Internet主机地址按网络字节顺序排列。
4、inet_netof()
原型为
in_addr_t inet_netof (struct in_addr __in)
返回Internet地址IN的网络号部分。
5、inet_network
原型为
in_addr_t inet_network (const char *__cp)
从CP开始的以数字和点表示的地址中按网络字节顺序提取网络号。
6、inet_ntoa()
原型为
char *inet_ntoa (struct in_addr __in)
将in中的Internet号码转换为ASCII表示。返回值是指向包含该字符串的内部数组的指针。
7、inet_pton()
原型为
int inet_pton (int __af, const char *__restrict __cp, void *__restrict __buf)
从CP开始的缓冲区中Internet号码的表示格式转换为二进制网络格式,并将接口类型AF的结果存储在从BUF开始的缓冲区中。
8、inet_ntop()
原型为
const char *inet_ntop (int __af, const void *__restrict __cp, char *__restrict __buf, socklen_t __len)
将从CP开始的缓冲区中接口类型AF的二进制网络格式的Internet地址转换为表示形式,并将结果放入从BUF开始的长度为LEN的缓冲区中。
<arpa/inet.h>
头文件通常与套接字编程相关的其他头文件一起使用,例如 <sys/socket.h>
和 <netinet/in.h>
。
<sys/socket.h>
是一个 C 语言标准库头文件。
通常用于 UNIX/Linux 系统中进行套接字编程。它包含了一些常量、数据结构和函数原型,用于创建和操作套接字(sockets)。
具体来说,<sys/socket.h>
头文件提供了以下功能:
- 定义了套接字类型的常量,例如
SOCK_STREAM
、SOCK_DGRAM
等。 - 定义了套接字地址结构的数据类型,例如
struct sockaddr
、struct sockaddr_in
等。 - 声明了套接字操作相关的函数原型,例如
socket()
、bind()
、listen()
、accept()
、connect()
、send()
、recv()
等。
这些函数和数据结构是进行网络编程时非常常用的,通过它们可以创建套接字、绑定地址、监听连接、接受连接、建立连接、发送和接收数据等。
<netinet/in.h>
是 C 语言中的一个头文件。
通常用于 UNIX/Linux 系统中进行套接字编程。它包含了一些与网络编程相关的定义和声明,特别是关于 Internet 地址(IPv4 和 IPv6)的定义。
具体来说,<netinet/in.h>
头文件提供了以下功能:
-
定义了 Internet 地址结构体:
struct sockaddr_in
:用于表示 IPv4 地址结构。struct sockaddr_in6
:用于表示 IPv6 地址结构。 -
定义了一些常量和宏,例如:
INADDR_ANY
:表示任意 IPv4 地址。IN6ADDR_ANY_INIT
:表示任意 IPv6 地址。IPPROTO_TCP
、IPPROTO_UDP
等:表示 TCP 和 UDP 协议。 -
网络字节序和主机字节序转换函数:
htonl()
、htons()
、ntohl()
、ntohs()
struct sockaddr_in
是描述Internet套接字地址的结构。
struct sockaddr_in {sa_family_t sin_family; // 地址族(Address Family),通常设置为 AF_INETin_port_t sin_port; // 端口号(Port Number),使用网络字节序(Big-endian)struct in_addr sin_addr; // IPv4 地址,使用网络字节序(Big-endian)char sin_zero[8]; // 未使用,填充 0
};
结构体中的各个字段含义如下:
sin_family
:地址族,指定了地址的类型,通常设置为AF_INET
,表示 IPv4 地址族。sin_port
:端口号,用于标识进程在主机上的通信端口。在网络编程中,通常使用htons()
函数将主机字节序转换为网络字节序。sin_addr
:IPv4 地址,用于指定通信的目标 IP 地址。它是一个struct in_addr
类型的结构体,表示一个 32 位的 IPv4 地址。IPv4 地址也是使用网络字节序表示的。sin_zero
:用于填充结构体的未使用部分,一般填充 0。
struct sockaddr_in
结构体通常用于创建套接字、绑定地址、建立连接等操作中。在套接字编程中,我们通常使用这个结构体来指定要连接的远程主机地址或者本地监听的端口地址。