1. 介绍

in_addr 结构体(ipv4)和 in6_addr结构体(ipv6)
        1)struct in_addr 结构体:表示一个32位的IPv4地址;
                struct in_addr {
                        in_addr_t s_addr;    //in_addr_t一般为32位的unsigned int,其字节顺序为网络字节序,即该无符号数采用大端字节序;其中每8位表示一个IP地址中的一个数值;
                };
        2)struct in6_addr结构体:表示一个32位的十六进制的IPv6地址;

2. 补充

        1.网络字节序和主机字节序比较容易混乱(大端表示和小端表示):
                网络字节序采用大端表示,就是数据的高位要存放到低地址。
                而大多数主机字节序采用小端表示(也有采用大端表示的主机字节序),就是数据的低位放到低地址。
        例:
                如无符号整型1338378,的二进制表示为:
                数据的高位----------------------------》数据的低位
                00000000  00010100  01101100  00001010
                所以采用小端表示的主机字节序时,内存中存放的形式为:
                低地址----------------------------------》高地址
                00001010  01101100  00010100  00000000

3. 应用

函数inet_ntoa和inet_aton(ipv4)+ inet_pton()和inet_ntop()函数(ipv4+ipv6)
        1)inet_ntoa()函数用于将一个十进制网络字节序转换为点分十进制IP格式的字符串。
                函数原型:char*inet_ntoa(struct in_addr in);
                返回值:正确执行返回一个字符指针(十进制ip字符串);错误返回NULL;
        2)inet_aton是一个改进的方法来将一个字符串IP地址转换为一个32位的网络序列IP地址。
                函数原型:int inet_aton(const char *string, struct in_addr *addr);
                返回值:成功执行(string点分十进制地址正确)函数的返回值非零,如果输入地址不正确则会返回零;
        3)inet_pton将一个字符串IP地址转换为一个网络序列IP地址。
                函数原型:int inet_pton(int af, const char *src, void *dst);
                参数:af:地址簇,可选项:AF_INET(IPv4);AF_INET6(IPv6);
                        src:传入的IP地址
                        dst:将ip地址转换成网络字节序后的结果存储在dst指向的in_addr结构体中 s_addr 成员;或in6_addr结构体中;
                返回值:若成功则为1,若输入不是有效的表达式则为0,若出错则为-1
        4)inet_ntop将一个十进制网络字节序转换为点分十进制IP格式的字符串。
                函数原型:const char *inet_ntop(int af, const void *src,char *dst, socklen_t size);
                参数:af:地址簇,可选项:AF_INET(IPv4);AF_INET6(IPv6);
                        src:传入的网络字节序;
                        dst:传出的IP地址;
                        size:IP地址长度;
                返回值:若成功则为指向结构的指针,若出错则为NULL

 注:inet_ntoa()和inet_aton()只适用于ipv4地址;inet_pton()和inet_ntop()函数,ipv4和ipv6均适用;

        函数inet_addr()和inet_network()
        1)函数inet_addr()原型: in_addr_t inet_addr(const char *cp);        
                参数:cp传入的一个点分十进制的IP地址
                返回值:正确返回网络字节序(无符号长整形);失败返回-1(INADDR_NONE);
        2)函数inet_network()原型:in_addr_t inet_network(const char *cp);
                参数:cp传入的一个点分十进制的IP地址
                返回值:正确执行将返回主机字节序(无符号长整数型数);如果传入的字符串不是一个合法的IP地址,将返回INADDR_NONE;
        注:inet_addr返回的整数形式是网络字节序,而inet_network返回的整数形式是主机字节序

in_addr和in6_addr结构体相关推荐

  1. IPv4地址的结构体与网络字节序

    IPv4地址的结构体 /* Fixed-size types, underlying types depend on word size and compiler. */ typedef signed ...

  2. struct in_addr 结构体

    struct in_addr 结构体: struct in_addr {in_addr_t s_addr; }; 表示一个32位的IPv4地址. in_addr_t 一般为32位的unsigned i ...

  3. 结构体sockaddr、sockaddr_in、sockaddr_in6之间的区别和联系

    本文转自https://blog.csdn.net/albertsh/article/details/80991684,简单易懂,赞. 前言 最近在学习网络相关的知识,虽然之前代码写了不少,但是长时间 ...

  4. C 语言编程 — 结构体的数据类型转换

    目录 文章目录 目录 数组类型强制类型转换为结构体 结构体之间的强制类型转换 数组类型强制类型转换为结构体 先看一个例子: #include <stdio.h>int main(void) ...

  5. linux c 域名转ip函数 gethostbyname 返回结构体 hostent 简介

    在linux网络编程中,gethostbyname函数可以通过域名url直接获得ip地址相关信息,返回的是一个名为hostent的结构体,通过man gethostbyname手册查询后,发现该结构体 ...

  6. 三、初识Socket套接字结构体

    一.初识Socket套接字结构体 1.通用套接字结构体类型 struct sockaddr{sa_family_t sa_family; //协议簇char sa_data[14]; //协议簇数据} ...

  7. linux sock结构体,struct socket结构体详解

    在内核中为什么要有struct socket结构体呢? struct socket结构体的作用是什么? 下面这个图,我觉得可以回答以上两个问题.  由这个图可知,内核中的进程可以通过使用struct ...

  8. 内核中用于数据接收的结构体struct msghdr

    我们从一个实际的数据包发送的例子入手,来看看其发送的具体流程,以及过程中涉及到的相关数据结构.在我们的虚拟机上发送icmp回显请求包,ping另一台主机172.16.48.1.我们使用系统调用send ...

  9. sockaddr_in 结构体

    strcut sockaddr 是用来描述 IPv4 地址协议,原始结构体 sockaddr 已经被废弃掉了. 常使用 strcut sockaddr_in 类型. struct sockaddr_i ...

最新文章

  1. 她92年的,27岁,当上浙大博导。
  2. MySQL的并发控制与加锁分析
  3. 2021牛客暑期多校训练营4 G-Product(组合意义+容斥原理)
  4. ***error*** (zip#Browse) unzip not available on your system
  5. 初级java程序员怎样快速提升自己
  6. R语言中%in%的作用
  7. java easyui 模板_漂亮easyui皮肤组件html模板下载A 最新 最全
  8. WIn10下如何为不同的显示器设置不同的桌面背景
  9. 银行卡quickpass闪付芯片通过EVM/PBOC读取信息
  10. 图像插值理论研究——双三次插值(双立方插值)
  11. 临床试验中的样本量估算---实践篇
  12. 工作小记 编译 ffmpeg gpu 版本
  13. hdwiki v5.1存在SQL注入导致可下载任意文件
  14. html5 contenteditable 可编辑属性
  15. 《俪影2046》v2.09 完美破解
  16. 如何设置计算机的休眠时间,电脑的睡眠时间如何设置?
  17. 从目标检测到小目标检测
  18. 张勇卸任淘宝董事长,戴珊接任;苹果称不送充电器已节省55万吨矿石;Windows彻底告别SMB1传输协议|极客头条
  19. 全栈开发实战|​名片管理系统的设计与实现(SSM + JSP)
  20. 55岁李连杰近照疯传:人生下半场,拼的是健康

热门文章

  1. 路由器的Loopback地址是什么意思?
  2. CIS-企业形象统一战略
  3. 论开发能力提高之道-御剑飞升的实现 1
  4. C++ sort()排序详解
  5. Nginx缓存以及反向代理缓存设置
  6. 有什么办法能让皮肤更白吗?
  7. 学习.NET过程及工作经历...
  8. 本人学习经历经验积累
  9. 使用Vue封装图表组件
  10. tp5中在定义当前是否是移动端浏览页面的常量