Linux网络编程入门 互动版

根据前面所介绍的内容,本节介绍下网络地址初始化的方法。网络地址初始化本质上就是对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文件,完成网络地址初始化,并编译测试。