千锋教育+计算机四级网络-计算机网络学习-03
目录
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为数字,然后再使用字节序函数转换为大端数据才能传输
千锋教育+计算机四级网络-计算机网络学习-03相关推荐
- 千锋教育+计算机四级网络-计算机网络学习-01
目录 课程链接 最早的广域网 计算机网络发展阶段 计算机网络的定义与要点 英文单词网络术语与解释 计算机网络分类 广域网技术 城域网 局域网 个人局域网 五种基本的网络拓扑结构 误码率 电路交换网特 ...
- 千锋教育+计算机四级网络-计算机网络学习-04
UDP概述 UDP协议 面向无连接的用户数据报协议,在传输数据前不需要先建立连接:目地主机的运输层收到UDP报文后,不需要给出任何确认 UDP特点 相比TCP速度稍快些 简单的请求/应答应用程序可以使 ...
- 千锋教育+计算机四级网络-计算机网络学习-02
目录 分组交换的两种传输方式 数据报方式 编辑 虚电路方式 OSI参考模型 IP地址分类 公有IP 私有IP 回环ip地址 子网掩码 端口 端口号 端口分类 数据包的组装.拆解 网络应用程序开发流程 ...
- 计算机四级网络工程师学几天,计算机四级网络工程师学习笔记
出国留学网计算机等级考试为您推荐计算机等级考试基础知识点,高频考点,重点以及难点,希望对您学习计算机等级有所帮助,从而取得好成绩,这将是我们最大的心愿. 企业网与Intranet 一.企业网络计算的背 ...
- 计算机四级考试题库 苹果,App Store 上的“计算机四级网络工程师考试题库”...
计算机四级网络工程师考试题库,本软件包含了大量计算机四级网络工程师考试题,对备战考试的朋友很有帮助. 软件中包括以下内容: 全国计算机等级考试四级网络工程师知识点总汇 计算机四级网络工程师试题 201 ...
- 国家计算机网络工程师考试,计算机四级网络工程师考试内容了解一下!
计算机四级网络工程师考试内容了解一下! 时间:2018-06-12 10:48:50 全国计算机等级考试,是经原国家教育委员会批准,由教育部考试中心主办,面向社会,用于考查应试人员计算机应用知识与技能 ...
- 2015年四级计算机网络课程,2015年计算机四级网络工程师考试辅导:网络互连技术...
2015年计算机四级网络工程师考试辅导:网络互连技术 网络互连原理 1.网络互连的要求:在网络之间提供一条链路,至少需要一条物理和链路控制的链路;在不同网络的进程间提供路径选择和传递数据;提供各用户使 ...
- 计算机网络工程师等级考试,计算机四级网络工程师等级考试真题_3.doc
计算机四级网络工程师等级考试真题_3 第六套 一.单选题(一共60道,每个1分,共计60分) (1) 在计算机中配置操作系统的主要目的是 A.提高计算机系统资源的利用率 B.增强计算机的功能 C.提高 ...
- PyEcharts学习笔记整理,基于B站千锋教育
目录 1. PyEcharts:初始化配置.全局配置项(标题配置.缩放配置) 2. PyEcharts:全局配置项(图例配置项.视觉映射配置项.提示框配置项.坐标轴配置项) 3. PyEcharts: ...
最新文章
- 像不像等待项目上线的你
- [Web开发] 在网页中动态加入RSS feed 元素
- spark 历史版本下载地址
- Java黑皮书课后题第5章:*5.46(倒排一个字符串)编写一个程序,提示用户输入一个字符串,然后以反序显示该字符串
- 对交换机VLAN及各种端口类型的理解
- flink 1.9.0 编译:flink-fs-hadoop-shaded 找不到
- android mvp设计思想,Android-MVP设计模式(基础)
- IPython 的使用
- js时间戳转化成日期格式
- 使用 ReportLab 绘制 PDF
- java netbean_java NetBean创建及各菜单项相对应的窗体及布局教程.pdf
- Android 自定义viewGroup实现淘宝二楼及处理多指触控事件
- 重装系统蓝屏,电脑开机蓝屏解决方法记录
- Python查找文件夹中含有指定关键字的文件
- css图片颜色设置为黑白
- JS验证用户真实姓名
- 浅谈机器人控制与仿真设计----RDS和ROS
- 第三方直播美颜SDK的美颜功能是怎么实现的?
- JAVA练习165-复数乘法
- php 腾讯云 文字识别_讯飞语音转文字,图片转文字,效率高还免费