IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 大小端字节序转换 -> 正文阅读

[网络协议]大小端字节序转换

在这里插入图片描述

特点

①各主机的字节序可能不同,网络协议指定的通讯字节序为大端。
②只有在多字节数据处理时才需要考虑字节序。
③运行在同一台计算机的进程互相通信时,不需要考虑字节序。

二、字节序转换函数

头文件:#include <arpa/inet.h>
①htonl函数(发送数据方使用)

32位:(IPv4字节序的转换)

uint32_t htonl(uint32_t host32bitvalue); 

功能:将32位主机字节序数据转换成网络字节序数据。
返回值:返回网络字节序的值。

②ntohl函数(接收数据方使用)

uint32_t ntohl(uint32_t net32bitvalue);     //返回主机字节序的值

功能:将32位网络字节序转换成主机字节序数据。
返回值:返回主机字节序的值。

16位(端口的转换)

③htons函数(发送方使用)

uint16_t htons(uint16_t host16bitvalue);    //返回网络字节序的值

功能:将16位主机字节序数据转换成网络字节序数据。

返回值:返回网络字节序的值。
④ntohs函数(接收方使用)

uint16_t ntohs(uint16_t net16bitvalue);     //返回主机字节序的值

功能:将16位网络字节序转换成主机字节序数据。
返回值:返回主机字节序的值。

总结:四个函数,如果主机和网络字节序相同,那么函数不会颠倒数据

二、新型网路地址转化函数

这两个函数是随IPv6出现的函数,对于IPv4地址和IPv6地址都适用,函数中p和n分别代表表达(presentation)和数值(numeric)。地址的表达格式通常是ASCII字符串,数值格式则是存放到套接字地址结构的二进制值。

① 将点分十进制的ip地址转化为用于网络传输的数值格式

int inet_pton(int family, const char *strptr, void *addrptr);    

参数:family 协议族
     strptr 点分十进制数串
     addrptr 32位无符号整数的地址

返回值:若成功则为1,若输入不是有效的表达式则为0,若出错则为-1

eg:

#include <stdio.h>
#include <arpa/inet.h>

int main()
{
	//点分十进制数串
	char *str_ip="172.20.10.1";
	//32位无字符串整型数据
	unsigned int num_ip=0;
	//AF_INET:IPv4  AF_INET6:IPv6
	inet_pton(AF_INET,str_ip,&num_ip);
	
	printf("转换前:str_ip=%s\n",str_ip);
	printf("转换后:num_ip=%u\n",num_ip);
	
	return 0;	
}

②将数值格式转化为点分十进制的ip地址格式

const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len);     

返回值:若成功则为指向结构的指针,若出错则为NULL

eg:

#include <stdio.h>
#include <arpa/inet.h>

int main()
{
	//模拟一个32位网络字节序IP地址
	unsigned char p[]={192.168.0.1};
	
	char ip_str[16]="";
	inet_ntop(AF_INET,p,ip_str,16);
	printf("ip_str:%s\n",ip_str);
	
	return 0;	
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 12:12:36  更:2022-04-26 12:13:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 4:01:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码