首页 > 其他分享 >tcp/ip网络通信时的大小端序转换

tcp/ip网络通信时的大小端序转换

时间:2024-03-22 16:23:35浏览次数:25  
标签:端序 转换 字节 ip tcp IP地址 整形 inet

1.短整形/长整形的转换

#include <arpa/inet.h>
// u:unsigned
// 16: 16位, 32:32位
// h: host, 主机字节序
// n: net, 网络字节序
// s: short
// l: int

// 这套api主要用于 网络通信过程中 IP 和 端口 的 转换
// 将一个短整形从主机字节序 -> 网络字节序
uint16_t htons(uint16_t hostshort);    
// 将一个整形从主机字节序 -> 网络字节序
uint32_t htonl(uint32_t hostlong);    

// 将一个短整形从网络字节序 -> 主机字节序
uint16_t ntohs(uint16_t netshort)
// 将一个整形从网络字节序 -> 主机字节序
uint32_t ntohl(uint32_t netlong);

 

2.只适用于IPv4的ip地址转换

//网络字节序IP转化点分十进制IP
char *inet_ntoa (struct in_addr)

//点分十进制IP地址转换成网络字节序IP地址
in_addr_t inet_addr(const char *cp)

//点分十进制IP地址转换成网络字节序IP地址
int inet_aton(const char *string, struct in_addr *addr)

其中,inet_ntoa和inet_aton都是<arpa/inet.h>头文件,inet_addr是<sys/socket.h>头文件,均在Linux系统中使用。

 

3.既适用于IPv4,又适用于IPv6的ip地址转换

#include <arpa/inet.h>
// 将大端的整形数, 转换为小端的点分十进制的IP地址        
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

参数:

af: 地址族协议

AF_INET: ipv4格式的ip地址

AF_INET6: ipv6格式的ip地址

src: 传入参数, 这个指针指向的内存中存储了大端的整形IP地址

dst: 传出参数, 存储转换得到的小端的点分十进制的IP地址

size: 修饰dst参数的, 标记dst指向的内存中最多可以存储多少个字节

返回值:

成功: 指针指向第三个参数对应的内存地址, 通过返回值也可以直接取出转换得到的IP字符串

失败: NULL

 

// 主机字节序的IP地址转换为网络字节序
// 主机字节序的IP地址是字符串, 网络字节序IP地址是整形
int inet_pton(int af, const char *src, void *dst); 

参数:

af: 地址族(IP地址的家族包括ipv4和ipv6)协议

AF_INET: ipv4格式的ip地址

AF_INET6: ipv6格式的ip地址

src: 传入参数, 对应要转换的点分十进制的ip地址: 192.168.1.100

dst: 传出参数, 函数调用完成, 转换得到的大端整形IP被写入到这块内存中

返回值:成功返回1,失败返回0或者-1

标签:端序,转换,字节,ip,tcp,IP地址,整形,inet
From: https://www.cnblogs.com/eisenshu/p/18089719

相关文章

  • PIP常用命令
    此文章仅供个人记录,非专业人士随笔pip一般位于Python310/Scripts目录下,找到Python的安装目录进去就能找到pip.exepip命令需要在Scripts目录下运行,进入Scripts目录,在路径的位置输入cmd即可;显示当前版本pipshowpillow安装指定版本pipinstallpillow==9.5.0升级到最新版......
  • JavaScript object.is()和严格相等、非严格相等的区别
    1.==(相等运算符)        当使用==比较两个值时,如果它们的类型不同,JavaScript会尝试将它们转换为一个共同的类型,然后再进行比较。这个过程称为类型转换或类型强制。0=='0'//true,因为字符串'0'会转换为数字01==true//true,因为布尔值true会转换为数字1nul......
  • DataGrip 汉化、IDEA 汉化 、Rider 汉化
    关于汉化效果图打开IDE 点击file下的Settings找到插件  点击OK   不管是IDEA还是DataGrip以及Rider都一样的操作。 ......
  • 什么是IOE?IOE和代理IP
    一、IOE的定义和功能【定义】IOE,全称InternetofEverything,即万物互联,是一种全新的技术架构,旨在将全球范围内的各种物理设备和人员通过互联网紧密地连接在一起,形成一个智能化的互联世界。【功能】连接万物:IOE的核心理念在于连接一切可以连接的事物,包括设备、传感器、人员等......
  • 反向HTTP代理与代理IP的联系和区别
    【定义和功能】反向HTTP代理是一种网络服务,它充当了服务器和客户端之间的中介,通过代理服务器来转发客户端的请求,并将服务器的响应返回给客户端。它主要用于代表服务器接收请求,隐藏服务器的真实IP地址,并可以用于负载均衡、安全防护、CDN加速等场景。而代理IP,即代理服务器,是网络......
  • linux 静态ip
    在Linux系统中设置固定IP地址,通常涉及以下步骤:确认网络接口。使用命令`ipaddr`和`ifconfig`来查看当前的网络接口和IP地址。例如,在`/etc/sysconfig/network-scripts/`目录下,通常会有一个名为`ifcfg-ens33`的文件,其中`ens33`是网络接口的名称。编辑网络配......
  • python如何导出项目依赖【pipreqs】
    1、导出python环境中的所有依赖pipfreeze>requirements.txt此方法会导出python环境所有安装过的依赖2、仅导出当前项目中的依赖需要使用pipreqs这个工具安装pipinstallpipreqs然后进入项目的根目录,并执行pipreqs.--encoding=utf8--force【.】:表示生成的re......
  • JavaScript 本地存储
    1.前言由来:localStorage和sessionStorage是HTML5标准中新加入的技术,用于保存整个网站的数据两者区别:localStorage的生命周期是永久的,除非手动删除,而sessionStorage仅在当前会话下有效(即使是同个域名下的网页也无法访问当前会话下创建的键值对,关闭页面或浏览器后被清除,刷新当......
  • TCP/IP协议栈
    TCP/IP是一个ProtocolStack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议RFC文档:https://www.ietf.org/rfc/rfc1180.htmlTCP/IP分层共定义了四层,和OSI参考模型的分层有对应关系TCP/IP通信过程TCP/IP和OSI模型的比较相同点两者都是以协议栈的......
  • IP地址及子网划分
    IP地址及子网划分目录IP地址及子网划分1、什么是IP地址2、IP地址类型2.1、公网地址2.2、私网地址2.3特殊地址3、IP地址分类4、IP地址的构成5、子网掩码6、子网划分1、什么是IP地址P地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十......