在 Linux 嵌入式编程中,sockaddr_in
是用于描述 IPv4 网络地址的结构体,通常在套接字编程中与网络通信相关。它是 sockaddr
的一种具体类型,专门用于 IPv4 的地址处理。
以下是 sockaddr_in
的定义(在 <netinet/in.h>
中)及其字段解释:
struct sockaddr_in {sa_family_t sin_family; // 地址族 (Address Family),AF_INET 表示 IPv4in_port_t sin_port; // 端口号(16 位),需要用网络字节序(大端)struct in_addr sin_addr; // IP 地址char sin_zero[8]; // 填充字节,不使用,保证与 sockaddr 等长
};
字段详解:
-
sin_family
:- 指定地址族,
AF_INET
表示 IPv4。 - 与
sockaddr
中的sa_family
对应。
- 指定地址族,
-
sin_port
:- 表示端口号,通常使用函数
htons()
转换为网络字节序(大端)。 - 例如,
sin_port = htons(8080);
设置端口号为 8080。
- 表示端口号,通常使用函数
-
sin_addr
:- 表示 IPv4 地址,使用结构体
struct in_addr
。 - 主要字段是
in_addr_t s_addr
,表示 32 位的 IPv4 地址。【注意:这里面的in_addr_t
表示类型名,通常是一个 uint32_t,用于表示 32 位的 IPv4 地址,s_addr才是这个字段真正的名字。】 - 常用的工具函数:
inet_pton(AF_INET, "192.168.1.1", &sin_addr)
:将字符串形式的 IP 地址转换为网络字节序的in_addr
。inet_ntop(AF_INET, &sin_addr, buffer, sizeof(buffer))
:将网络字节序的in_addr
转换为字符串形式。
- 表示 IPv4 地址,使用结构体
-
sin_zero
:- 保留字段,为了使结构体大小与
sockaddr
对齐,通常初始化为 0。
- 保留字段,为了使结构体大小与