struct sockaddr_in
是一个定义在 C 标准库中的结构体,用于存储与 IPv4 地址相关的网络信息。
sockaddr_in
结构体定义
sockaddr_in
通常定义在头文件 <netinet/in.h>
中。它的定义类似如下:
struct sockaddr_in {
sa_family_t sin_family; // 地址族 (Address family),通常是 AF_INET
in_port_t sin_port; // 16-bit 端口号 (Port number),需要使用 htons() 转换为网络字节序
struct in_addr sin_addr; // 32-bit IPv4 地址 (IPv4 address)
char sin_zero[8]; // 填充字节 (Padding),为保持与 `struct sockaddr` 一致
};
成员变量说明:
-
sin_family
:- 类型:
sa_family_t
- 描述:指定地址族,这里通常是
AF_INET
,表示使用 IPv4 地址。
- 类型:
-
sin_port
:- 类型:
in_port_t
- 描述:端口号,16 位的整数,通常用
htons()
函数将主机字节序转换为网络字节序。
- 类型:
-
sin_addr
:- 类型:
struct in_addr
- 描述:存储 IPv4 地址的结构体,其中主要是一个 32 位的地址。常用成员为
sin_addr.s_addr
。
- 类型:
-
sin_zero[8]
:- 类型:
char[8]
- 描述:为了与
sockaddr
结构体保持一致的填充字节,通常设置为 0,在实际操作中很少使用。
- 类型:
struct in_addr
结构体
sin_addr
是 struct in_addr
类型的一个成员,定义如下:
struct in_addr {
uint32_t s_addr; // 32-bit IPv4 地址
};
如何使用 sockaddr_in
你可以通过 sockaddr_in
结构体来指定一个 IP 地址和端口,然后将其用于各种网络操作,如 bind()
、connect()
、sendto()
等等。
示例代码
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
int main() {
struct sockaddr_in address;
// 设置地址族为 IPv4
address.sin_family = AF_INET;
// 将端口号设置为 8080
address.sin_port = htons(8080);
// 将 IP 地址设置为 127.0.0.1
address.sin_addr.s_addr = inet_addr("127.0.0.1");
// 打印结果
printf("Address family: %d\n", address.sin_family);
printf("Port: %d\n", ntohs(address.sin_port));
printf("IP: %s\n", inet_ntoa(address.sin_addr));
return 0;
}
总结
sockaddr_in
是一个结构体,包含有关 IPv4 地址的信息,没有成员函数,只有成员变量。- 你可以通过
#include <netinet/in.h>
使用这个结构体,它通常用于网络编程中,特别是在设置和处理套接字的地址时。