地址族与数据序列

书上讲解了一些ipv4地址的概念,以及ipv6地址的概念。

又说了一些端口号的概念,以及端口号的作用。

但是还是很复杂的,直接理解我第一章节说的内容,每个概念只有一句话.但是这是建立在我对网络编程的了解基础上的.

下讲解了

mindmap
    root((sockadd_in))
        sin_family(sin_family)
            AF_INET(AF_INET)
            AF_INET6(AF_INET6)
            AF_Local(AF_Local)
        sin_port(sin_port)
            htons("htons(int)")
        sin_addr(sin_addr)
            s_addr(s_addr)
                inet_addr("inet_addr(char*)")

需要把sockaddr_in转化成struct sockaddr *才能使用bind()等函数.

网络字节序与地址的转换

  • htons(int):将int类型整数转换为网络字节序。
  • htonl(int):将int类型整数转换为网络字节序。
  • ntohs(int):将int类型整数转换为主机字节序。
  • ntohl(int):将int类型整数转换为主机字节序。
  • inet_addr(char*):将char*类型字符串转换为in_addr类型。
  • inet_aton(char*, struct in_addr*):将char*类型字符串转换为in_addr类型。
  • inet_ntoa(struct in_addr):将in_addr类型转换为char*类型字符串,失败返回-1

每次创建服务器端socket都要输入IP地址会有些繁琐,此时可以使用如下的初始化地址信息

struct sockaddr_in server_addr;
char * serv_port = "8989";
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(atoi(serv_port));
server_addr.sin_addr.s_addr = inet_addr(INADDR_ANY);