网络字节序和本机转换

计算机在存储数据时是有大小端的概念的:
如果程序仅在本地机器上运行,就无需考虑大小端问题。因为同一台机器上的数据存储方式相同,要么是大端存储模式,要么是小端存储模式。然而,若涉及网络通信,就必须考虑大小端问题,不然对端主机识别出的数据可能与发送端想要发送的数据不一致。
现在两台主机在进行网络通信,发送端是小端机,接收端是大端机。发送端把发送缓冲区中的数据,按照内存地址从低到高的顺序发出。接收端从网络获取数据并依次保存在接收缓冲区时,同样是按内存地址从低到高的顺序保存。
发送端采用小端存储,接收端采用大端存储。对于内存地址从低到高的序列,发送端按小端方式识别出的是[具体内容 1],接收端按大端方式识别出的是[具体内容 2]。这样,接收端识别到的数据与发送端原本想要发送的数据不同,这是由于大小端的偏差导致数据识别出现错误。
因为我们无法确保通信双方存储数据的方式相同,所以网络中传输的数据需要考虑大小端问题。TCP/IP 协议规定,网络数据流采用大端字节序,也就是低地址对应高字节。不管是大端机还是小端机,都必须依据 TCP/IP 协议规定的网络字节序来进行数据的发送和接收。
在这个例子里,发送端是小端机,所以在发送数据之前,得先把数据转换成大端,接着再发送到网络中。而接收端是大端机,因此接收端接收到数据后,能够直接进行数据识别。此时,接收端识别出来的数据和发送端原本想要发送的数据是相同的。
需要注意的是,操作系统会完成所有大小端的转化工作。因为此操作属于通信细节,所以部分信息需要我们自行处理,例如端口号和 IP 地址。
如何证明自己的机器采用了哪种字节顺序:
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre><code class="language-cpp">/* 确定你的电脑是大端字节序还是小端字节序 */ #include <stdio.h> int check1() { i 等于 1;1 在内存中的表示为 0x00000001 即将 int 型的地址强制转换为 char 型 。 如果读取到的第一个字节是 1,那么就是小端法;如果读取到的第一个字节是 0,那么就是大端法。并且是通过判断 *pi 是否等于 0 来确定的。 } int main() { if (check1() == 1) printf("big\n"); else printf("little\n"); return 0; } 第二种方法,我们用联合结构解决,其本质差异不大 /* 确定你的电脑是大端字节序还是小端字节序 */ #include <stdio.h> int check2() { union test { char ch; int i; }test0; test0.i = 1; return test0.ch == 0; } int main() { if (check1() == 1) printf("big\n"); else printf("little\n"); return 0; } </code></pre></p>为什么网络字节序采用的是大端?而不是小端?
若网络字节序采用小端,发送端和接收端在收发数据时就无需进行大小端转换。
该问题有很多不同说法,下面列举了两种说法:
字节序转换函数
为让网络程序具备可移植性,让相同的 C 代码在大端和小端计算机上编译后都能正常运转,系统给出了四个函数,能够通过调用以下库函数来达成网络字节序与主机字节序之间的转换。
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre><code class="language-cpp"> #include <a style='color:#0000CC;font-size:15px;' rpa/inet.h> //将主机字节序转换为网络字节序 调用 unit32_t htonl 函数,并传入 unit32_t 类型的 hostlong 参数。 通过 unit16_t 类型的 hostshort 实施 htons 动作。 //将网络字节序转换为主机字节序 对 netlong 进行 ntohl 处理得到 unit32_t ; 以 unit16_t 类型的 netshort 为参数进行 ntohs 处理; 说明:h 表示主机;n 表示网络;s 表示短;l 表示长。 htons()被称为“Host to Network Short”。 htonl()的意思是“主机到网络长整型” ntohs() 被称为“网络到主机短” ntohl()的含义为“网络到主机长整型” </code></pre></p>
# 网络字节序和本机转换:大小端存储模式对网络通信的影响解析
# 网络字节序和本机转换
# 大小端存储模式对网络通信的影响解析
# 的是
# 转换为
# 第一个
# 被称为
# 具体内容
# 你的电脑
# 网络通信
# 自己的
# 整型
# 这是
# 在这个
# 出了
# 是有
# 有很多
# 都能
# 两种
# 一台
# 采用了
# 机器上
# 时就
# 南充模板网站推广公司
# 镇江网站推广优化
# 宿迁关键词排名工具网站
# 长春seo工具推荐
# 推广创意网站哪个好用点
# 南京*网站建设优点
# 心情seo
# 广州seo建站
# 海南全网营销如何做推广
# 广州专业网站推广软件
# 渝水区个人网站建设低价
# 燕山大学独特网站建设
# 浙江品牌营销推广方案
# 网站运营推广实训报告
# 无锡江阴市网站优化开发
# 黄页网站推广app咋做广告的
# seo服务商
# 鄂州网站建设案例教程书
# 草莓营销推广方案英文翻译
# 吉林网站推广销售电话
相关文章:
优化收费,助力企业提升效益,实现共赢,关键词排名高没展现
想在广告联盟上接单赚钱,这些qq引流技巧你必须掌握!
自媒体营销,如何在不为人知的情况下实现品牌价值的飙升?,门窗加盟推广网站有哪些
资深站长总结的快速提升网站排名的5个小技巧分享
app推广初期应该怎么做?
自媒体运营该怎么做?如何才能运营成功一个自媒体账号?
云推SEO:让您的网站在激烈竞争中脱颖而出,大庆网站推广
二创AI:打破创意壁垒,引领未来内容创作新潮流,主要的推广网站
最基础最实用的9个网站推广方法,帮助网站快速吸引流量!
新手必看的7个常见的项目推广赚钱方法!
伪原创:内容创作新时代的挑战与机遇,SEO入门书籍设计排版
网页优化和网站搜索引擎优化有何区别?
SEO导航:助力网站提升流量与排名的必备工具,永州政府网站建设公示
想要通过网络营销引流获客?这10种最常见的方法必须掌握!
教你如何利用app交叉推广来0成本推广自己的app,大量吸粉!
优化原理:提升效率、创新突破的核心法则,苏宁易购的网络营销推广
这样发布网站外链才能帮助我们更好的提升收录和排名!
乘风SEO:突破困境,领航网络营销新时代,谷歌seo推广有效果吗
【站长联盟】个人站长怎么通过网站赚钱?
超实用的手机APP试玩赚钱项目玩法分享!
SEO地位:如何提升你的网站排名与曝光度,抢占市场先机,tob和toc营销推广
优化文字,让表达更精准:提升写作效率的关键,科普网站资源建设
优化综合:引领高效发展的智慧之道,峄城推广营销系统
SEO调整,助力网站流量爆发式增长!,罗湖网站排名优化公司
新手做自媒体运营的5大实用技巧和7个必备工具!
微信*号引流的五大方法,学会了每日引流100+轻轻松松!
WPJam:打破网站管理的壁垒,打造极致用户体验,seo优化金苹果下拉二
谈谈那些装机广告联盟日赚200的骗局,小心别上当受骗!
SEO那么重要,企业如何通过它脱颖而出?,永安网站seo优化
借势互联网:如何利用数字浪潮推动品牌腾飞,四川seo软件打造
2021年网上赚钱方法有哪些?这四个最值得做!
月入过万的网赚项目app拉新赚钱业务分享!
社交app如何利用社交新媒体快速进行app推广引流?
另类推广赚钱方法,做好了日赚1000没问题!
盘点我们曾经用过的广告联盟推广方式,哪几种你还在用?
制作软件全家桶静默安装包日赚1000元的玩法介绍!
全面提升网站效果的“整站”优化方案,让你的企业迈向数字化新高度!,网站推广哪个公司可以做
最新非常容易赚点零花钱的手机游戏赚钱项目推荐!
WPJVX:开启数字化未来的智慧平台,确山附近网络推广营销
SEO添加:提升网站流量与排名的必备策略,小企业seo实战技巧
5个可以提升seo推广效果的网站运营策略分享!
做国外lead项目如何赚钱?需要参加国外EMU赚钱培训吗?
通过淘客联盟赚钱的4种主流的淘客app模式分析!
关注热度,趋势-让你的品牌在市场中脱颖而出,广告商务营销推广方案设计
注意app推广引流过程中的这5个核心问题,祝你快速引流精准用户!
app长期运营推广的5个全网覆盖、精细化运营思路!
如何判断一个广告联盟靠不靠谱?主要看这三点!
中国AI软实力崛起:技术创新与产业应用的完美融合,五金门店营销推广方案
SEO考核:如何通过精准的SEO优化提升网站排名与流量,营销方案推广模板
福建百度推广预算,一天需要多少?,高效精准营销推广哪里有
*请认真填写需求信息,我们会在24小时内与您取得联系。