根据前面所介绍的内容,本节介绍下网络地址初始化的方法。网络地址初始化本质上就是对sockaddr_in结构体进行赋值
#include <stdio.h>
#include <string.h> // memset
#include <arpa/inet.h> // sockaddr_in
int main(int argc, char *argv[])
{
const char *server_ip = "127.0.0.1"; // 本机IP地址字符串
int server_port = 0x1234; // 端口号
struct sockaddr_in address;
memset(&address, 0, sizeof(address));
address.sin_family = AF_INET; // 地址族,IPv4
address.sin_port = htons(server_port); // 端口赋值
address.sin_addr.s_addr = inet_addr(server_ip); // IP地址赋值
printf("端口网络字节序:%#x\n", address.sin_port);
printf("IP地址网络字节序:%#x\n", address.sin_addr.s_addr);
return 0;
}
第2行引入头文件string.h,memset函数的头文件。
第3行引入头文件arpa/inet.h, sockaddr_in结构体的头文件。
第7~8行定义了一个IP地址和端口,其中127.0.0.1表示本地主机地址。
第11行memset函数将网络地址每个字节初始化为0,这样可以保证将sockaddr_in结构体的sin_zero字符数组均初化为0。
第13~15行对网络地址的三个字段进行赋值,其中端口和IP地址均转化为网络字节序进行赋值。
右侧打开address_init_test.c文件,完成网络地址初始化,并编译测试。