千锋教育+计算机四级网络-计算机网络学习-03

news2024/9/24 10:22:53

目录

UDP编程准备

字节序概述

 如何判断自己主机上的大小端方式

大小端重点 

 大小端所需函数

htonl函数

ntohl函数

htons函数

ntohs函数

 地址转换函数

inet_pton函数

inet_ntop函数


 

UDP编程准备

字节序概述

字节序概念

是指多字节数据的存储顺序,一个字节是不存在存储顺序,并且多字节是一个整体,比如int类型的数据

分类

小端格式:将低位字节数据存储在低地址

大端格式:将高位字节数据存储在低地址

单片机中也存在这种分类,keil调试的时候也会出现这种情况,一般常见的都是小端的模式

注意

LSB:低地址

MSB:高地址

 因此小端格式和大端格式取数据的方式不一样,因此不必要担心数据会弄错,在同一台主机中,但是在不同主机就不一定了,因为有些计算机是大端模式,而有些是小端模式,那么就会出现问题了

大-高数低址  小-低数低址

 如何判断自己主机上的大小端方式

由于大小端的方式是系统确定好的,人为无法直接改变的

强制类型转换、联合体两种方式判断主机大小端(其实后面还有一种,借助字节序转换函数判断)

 

大小端重点 

1、网络协议指定了通讯字节序—大端

2、只有在多字节数据处理时才需要考虑字节序

3、运行在同一台计算机上的进程相互通信时,一般不用考虑字节序

4、异构计算机之间通讯,需要转换自己的字节序为网络字节序(大端)。在需要字节序转换的时候一般调用特定字节序转换函数

如果忽略了大小端会发生什么?--- 接收的数据会错误 

 因此为了更好的配合,就规定网络数据传输一定是大端数据

分析好上下三个图就成功了,不管你主机是大端还是小端,只要你使用了相应的函数(这个函数会自动检测主机的大小端模式),(如果发送端主机是小端)那么就会把数据自动转换为大端数据才发送到网络中去,(如果接收端主机是小段)那么网络的大端数据就会被先转换为小端数据再发送给接收端主机

 

 

 答案为a,画一个内存的图就出来了

 

 大小端所需函数

这四个函数,其中两个函数常用于IP地址传输,另外一个函数常用于端口传输。当然数据的转换也是使用这些函数的

htonl函数

uint32_t htonl(uint32_t hostint32);

功能:

将32位主机字节序数据转换成网络字节序数据--因此使用在发送端主机

一般由于转换IP地址的,把IP地址(32位)发送给接收端主机

参数:

hostint32:待转换的32位主机字节序数据

返回值:

成功:返回网络字节序的值

头文件:

#include <arpa/inet.h>

ntohl函数

uint32_t ntohl(uint32_t netint32);

功能:

将32位网络字节序数据转换成主机字节序数据--因此使用在接收端主机

一般将网络字节序的IP地址转换为主机的IP地址

参数:

uint32_t: unsigned int

netint32:待转换的32位网络字节序数据

返回值:

成功:返回主机字节序的值

头文件:

#include <arpa/inet.h>

 

记忆方式:host--主机  net--网络  host to net表示主机-网络转换

htons函数

uint16_t htons(uint16_t hostint16);

功能:

将16位主机字节序数据转换成网络字节序数据--因此使用在发送端主机

一般由于将发送端主机端口转换为网络字节序的端口

参数:

uint16_t:unsigned short int

hostint16:待转换的16位主机字节序数据

返回值:

成功:返回网络字节序的值

头文件:

#include <arpa/inet.h>

ntohs函数

uint16_t ntohs(uint16_t netint16);

功能:

将16位网络字节序数据转换成主机字节序数据

一般由于将网络字节序的端口转换为接收端主机的端口

参数:

uint16_t: unsigned short int

netint16:待转换的16位网络字节序数据

返回值:

成功:返回主机字节序的值

头文件:

#include <arpa/inet.h>

因此可以使用字节序函数进行判断你主机是大小端格式

把主机数据转换为网络数据,如果数据不变,说明主机是大端,如果数据变了,那么就是小端存储了

 

 

 地址转换函数

一般指的就是IP地址

inet_pton函数

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

功能:

将点分十进制数串(字符串)转换成32位无符号整数,字符串IP地址转整型数据

使用于发数据

参数:

family       协议族 ---  IPV4转换为AF_INET  IPV6转换为AF_INET6

strptr       点分十进制数串

addrptr  32位(4字节)无符号整数的地址-因此类型可以为int

返回值:

成功返回1 、 失败返回其它

头文件:

#include <arpa/inet.h>

理解addrptr的意思:四个字节,保存着字符串的数字形式

#include <stdio.h>
#include <arpa/inet.h>
int main(int argc,char *argv[])
{
	char *ip_str = "192.168.13.100";
	unsigned int ip_uint = 0;
	unsigned char * ip_p =NULL;//可以用char吗?
	
	inet_pton(AF_INET,ip_str,&ip_uint);
	printf("ip_uint = %d\n",ip_uint);
	
	ip_p = (unsigned char *) &ip_uint;
	printf("ip_uint = %d.%d.%d.%d\n",*ip_p,*(ip_p+1),*(ip_p+2),*(ip_p+3));

 

 

记忆方式:p是point点的意思,to,net

inet_ntop函数

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

功能:

将32位无符号整数转换成点分十进制数串,整型数据转字符串格式ip地址

使用于收数据

参数:

family          协议族

addrptr       32位无符号整数

strptr           点分十进制数串

len           strptr缓存区长度

len的宏定义

#define INET_ADDRSTRLEN   16  //for ipv4

#define INET6_ADDRSTRLEN  46  //for ipv6

返回值:

成功:则返回字符串的首地址

失败:返回NULL

头文件:

#include <arpa/inet.h>

对于IPV4是十六字节,对于字符串"198.162.100.100",就是16个字节

#include<stdio.h>
#include<arpa/inet.h>
int main()
{
	unsigned char ip[]={192,168,13,252};
	char ip_str[16];
	inet_ntop(AF_INET,(unsigned int *)ip,ip_str,16);
	printf("ip_str = %s\n",ip_str);
	return 0;

 因此对于一个IP地址的转换,你就涉及到了把字符串IP地址转换为32为数字,然后再使用字节序函数转换为大端数据才能传输

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器缓存是如何提升网站访问速度的

提升速度&#xff0c;降低负载 浏览器访问一个页面时&#xff0c;会请求加载HTML、CSS和JS等静态资源&#xff0c;并把这些内容渲染到屏幕上。 对浏览器来说&#xff0c;如果页面没有更新&#xff0c;每次都去请求服务器是没有必要的。所以&#xff0c;把下载的资源缓存起来&…

快速傅里叶算法(FFT)快在哪里?

目录 前言 1、DFT算法 2、FFT算法 2.1 分类 2.2 以基2 DIT&#xff08;时间抽取&#xff09; FFT 算法为例 2.2.1 一次分解 2.2.2 多次分解 参考 前言 对信号分析的过程中&#xff0c;为了能换一个角度观察问题&#xff0c;很多时候需要把时域信号波形变换到频域进行分…

有什么免费好用的全球天气api?

简单介绍几个&#xff0c;选你觉得合适的就行。&#xff08;下面推荐的国内外的都有&#xff0c;访问速度会有些差别&#xff09; 高德天气 API -天气查询-API文档-开发指南-Web服务 API | 高德地图API知心天气 API -HyperData 数据产品简介 心知天气和风天气 API -和风天气开…

AI_News周刊:第一期

2023.02.06—2023.02.12 关于ChatGPT的前言&#xff1a; 在去年年末&#xff0c;OpenAI的ChatGPT在技术圈已经火了一次&#xff0c;随着上周它的二次出圈&#xff0c;ChatGPT算得上是人工智能领域的一颗明星&#xff0c;它在聊天机器人领域有着不可忽视的影响力。其准确、快速…

webpack.config.js哪里找?react项目关闭eslint监测

目录 webpack.config.js哪里找&#xff1f; react项目关闭eslint监测 webpack.config.js哪里找&#xff1f; 在React项目中&#xff0c;当我们需要修改一些配置时&#xff0c;发现找不到webpack.config.js&#xff0c;是我们创建的项目有问题吗&#xff0c;还需新创建项目的项…

【html】模仿C站动态发红包界面,css+div+js实现布局和交互(适合入门)

最近有些小伙伴咨询博主说前端布局好难&#xff0c;其实都是熟能生巧&#xff01; 模仿C站动态发红包界面&#xff0c;cssdiv实现布局&#xff0c;纯javascript实现交互效果 目录 1、界面效果 2、界面分析 2.1、整体结构 2.2、标题 2.3、表单 2.4、按钮 3、代码实现 3.…

【Kafka】【七】主题和分区的概念

主题和分区的概念 主题Topic 主题-topic在kafka中是⼀个逻辑的概念&#xff0c;kafka通过topic将消息进⾏分类。不同的topic会被订阅该topic的消费者消费。 但是有⼀个问题&#xff0c;如果说这个topic中的消息⾮常⾮常多&#xff0c;多到需要⼏T来存&#xff0c;因为消息是…

Spring Security in Action 第十二章 OAuth 2是如何工作的?

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringSecurity相关知识相关知识&#xff0c;打造完整的SpringSecurity学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#…

实战打靶集锦-005-HL

**写在前面&#xff1a;**记录一次曲折的打靶经历。 目录1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 浏览器访问4.2 目录枚举4.3 探查admin4.4 探查index4.5 探查login5 公共EXP搜索6. 再次目录枚举6.1 探查superadmin.php6.2 查看页面源代码6.3 base64绕过6.4 构建反弹…

JointBERT代码复现详解【下】

BERT for Joint Intent Classification and Slot Filling代码复现【下】 链接直达&#xff1a;JointBERT代码复现详解【上】 四、模型训练与评估 Trainer training&#xff1a;梯度更新evaluate&#xff1a;评估序列标注任务如何得到预测结果、评估函数 1.初始化准备 def …

【Unity3D】Shader常量、变量、结构体、函数

1 源码路径 Unity Shader 常量、变量、结构体、函数一般可以在 Unity Editor 安装目录下面的【Editor\Data\CGIncludes\UnityShader】目录下查看源码&#xff0c;主要源码文件如下&#xff1a; UnityCG.cgincUnityShaderUtilities.cgincUnityShaderVariables.cginc 2 Shader 常…

大数据技术架构(组件)33——Spark:Spark SQL--Join Type

2.2.2、Join Type2.2.2.1、Broadcast Hash Join (Not Shuffled)就是常说的MapJoin,join操作在map端进行的。场景&#xff1a;join的其中一张表要很小&#xff0c;可以放到Driver或者Executor端的内存中。原理:1、将小表的数据广播到所有的Executor端&#xff0c;利用collect算子…

微信小程序 数据绑定 Mustache语法怎么使用?

1.数据绑定的基本原则 ①在data中定义数据 ②在WXML中使用数据、 在页面对应的 .js 文件中。把数据定义到data对象中即可 在WXML文件中使用{{}}两个花括号加变量名称进行调用 以上使用方法&#xff0c;下面我么来实操 Mustache语法主要使用场景如下: 文本内容绑定 组件属性绑定…

Service

目录 文章目录目录本节实战1、Service1.Service概念2.Service存在的意义3.Pod与Service的关系2、三种IP3、定义 Service4、kube-proxy1.iptables2.ipvsiptables vs ipvs5、Service常见类型1.ClusterIP2.NodePort3.LoadBalancer4.ExternalName5.externalIPs6、Endpoints 与 Endp…

Java基础常见面试题(三)

String 字符型常量和字符串常量的区别&#xff1f; 形式上: 字符常量是单引号引起的一个字符&#xff0c;字符串常量是双引号引起的若干个字符&#xff1b; 含义上: 字符常量相当于一个整型值( ASCII 值)&#xff0c;可以参加表达式运算&#xff1b;字符串常量代表一个地址值…

STC15读取内部ID示例程序

STC15读取内部ID示例程序&#x1f389;本案例基于STC15F2K60S2为验证对象。 &#x1f4d1;STC15 ID序列介绍 STC15系列STC最新一代STC15系列单片机出厂时都具有全球唯一身份证号码(ID号)。最新STC15系列单片机的程序存储器的最后7个字节单元的值是全球唯一ID号&#xff0c;用…

使用阿里云IoT Studio建立物模型可视化界面

使用阿里云IoT Studio建立物模型可视化界面 上一篇文章介绍了如何使用ESP-01S上报数据到物模型&#xff1a;https://blog.csdn.net/weixin_46251230/article/details/128996719 这次使用阿里云IoT Studio建立物模型的Web页面 阿里云IoT Studio&#xff1a; https://studio.i…

02 图像通道处理

1 通道提取与合并 在数字图像处理中&#xff0c;图像通道是指一个图像中的颜色信息被分离为不同的颜色分量。常见的图像通道包括RGB通道、灰度通道、HSV通道等。 RGB通道是指将图像分离为红色、绿色和蓝色三个颜色通道&#xff0c;每个通道表示相应颜色的亮度。这种方式是最常…

RuntimeError: CUDA out of memory

今天在训练模型的时候突然报了显存不够的问题&#xff0c;然后分析了一下&#xff0c;找到了解决的办法&#xff0c;这里记录一下&#xff0c;方便以后查阅。 注&#xff1a;以下的解决方案是在模型测试而不是模型训练时出现这个报错的&#xff01; RuntimeError: CUDA out of…

基于JavaEE的智能化跨境电子商务平台的设计

技术&#xff1a;Java、JSP、框架等摘要&#xff1a;伴随着近年来互联网的迅猛发展&#xff0c;网上零售逐渐成为了一种影响广泛、方便快捷的购物渠道。我国网上零售业发展的步伐很快。在如今经济全球化的影响下&#xff0c;消费者的网购行为趋于开放化、多元化&#xff0c;对于…