1. 地址存储结构
头文件 : netinet/in.h
IPv4:
struct in_addr
{
in_addr_t s_addr; //uint32
};
struct sockaddr_in
{
uint8_t sin_len;
sa_family_t sin_family; //地址族
in_port_t sin_port; //Port uint16
struct in_addr sin_addr; //IP
unsigned char sin_sero[8]; //填充‘0’,
};
sin_zero[8]的作用是为了保证sockaddr_in的大小是16 bytes,这样便于和sockaddr相互转换
struct sockaddr
{
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
}
sa_data = sin_port + sin_addr + sin_zero
2. IP转换 ——char <--> int
字符串转in_addr的函数:
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);
in_addr_t inet_addr(const char *s