网络字节序 —— 主机字节序 (Socket编程) 转

在对IP地址结构体SOCKADDR_IN赋值的时候,经常会用到下列的函数htonl,htons,inet_addr,与之相对应的函数是ntohl,ntohs,inet_ntoa。查看这些函数的解析,会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序,什么是主机字节序呢?下面我写出他们之间的转换:

用IP地址127.0.0.1为例:

 

第一步   127     .         0         .         0         .        1                 把IP地址每一部分转换为8位的二进制数。

第二步 01111111     00000000     00000000     00000001      =   2130706433   (主机字节序)

然后把上面的四部分二进制数从右往左按部分重新排列,那就变为:

第三步 00000001     00000000     00000000    01111111        =   16777343        (网络字节序)

 

 

 

然后解析上面提到的函数作用就简单多了,看以下代码:

SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(2130706433); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000);

 

先是定义了一个IP地址结构体addrSrv,然后初始化它的IP时addrSrv.sin_addr.S_un.S_addr必须是赋值IP地址的网络字节序,htonl函数的作用是把一个主机字节序转换为网络字节序,也就是上面转换过程中第二步转换为第三步的作用,127.0.0.1的主机字节序是2130706433,把主机字节序2130706433转换为网络字节序就是htonl(2130706433)=16777343,所以如果你知道网络字节序是16777343的话,addrSrv.sin_addr.S_un.S_addr=htonl(2130706433);与addrSrv.sin_addr.S_un.S_addr=16777343;是完全一样的。

addrSrv.sin_addr.S_un.S_addr=htonl(2130706433);这句还可以写为:

addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); 结果是完全一样的。

可见inet_addr函数的转换作用就是上面的第一步到第三步的转换。

 

下面再看端口的主机字节序与网络字节序的转换。以6000端口为例。

 

第一步     00010111         01110000            =           6000 (主机字节序)

端口号其实就已经是主机字节序了,首先要把端口号写为16位的二进制数,分前8位和后8位。

第二步      01110000          00010111          =            28695 (网络字节序)

然后把主机字节序的前八位与后八位调换位置组成新的16位二进制数,这新的16位二进制数就是网络字节序的二进制表示了。

 

因此,如果你知道6000端口的网络字节序是28695的话。 addrSrv.sin_port=htons(6000);可以直接写为 addrSrv.sin_port=28695;结果是一样的,htons的作用就是把端口号主机字节序转换为网络字节序。

 

与htonl,htons,inet_addr,与之相对应的函数是ntohl,ntohs,inet_ntoa,不难看出,ntohl,ntohs,inet_ntoa,这三个函数其实就是执行与他们相对应函数的相反转换,在这里就不详细解析了。

 

 

转载声明: 本文转自 http://hi.baidu.com/feng411215/blog/item/c61764340161c8365ab5f521.html (百度空间)

 

===================================================================

 

字节序问题--大端法小端法

http://hi.baidu.com/tanchunhai/blog/item/bf02d758dcce1687800a1893.html

 

字节序(Endian),大端(Big-Endian),小端(Little-Endian)

http://www.cppblog.com/tx7do/archive/2009/01/06/71276.html

 

 

API SOCKET基础

 

(一) TCP建立连接并通信

http://hi.baidu.com/feng411215/blog/item/95eb6b7f66c5cc0529388a52.html

 

(二) UDP通信

http://hi.baidu.com/feng411215/blog/item/b423e4d369eb8a39960a165b.html

 

(三) 网络字节序与主机字节序的转换

http://hi.baidu.com/feng411215/blog/item/c61764340161c8365ab5f521.html

 

(四) TCP SOCKET recv的内存情况

http://hi.baidu.com/feng411215/blog/item/58adba039583657a3912bb3e.html

 

(五) 异步套接字

http://hi.baidu.com/feng411215/blog/item/7f1f034a3ab58a2e09f7ef38.html

 

(六) CAsyncSocket 与 CSocket

http://hi.baidu.com/feng411215/blog/item/bf5391c4e9f54dc639db491e.html

 

以上文字转自:http://www.cnblogs.com/wdpp/archive/2010/12/07/2386844.html

转载于:https://www.cnblogs.com/BlogInLife/archive/2013/02/28/2937837.html

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

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

相关文章

全球最具影响力AI机构TOP100排名:中国5所高校1所研究院入围

来源:学术头条(SciTouTiao)现在“人工智能”(ArtificialIntelligence)一词时常“做客”各大媒体平台,成为人们所关注的热点话题,而在学术圈,AI技术同样也是最具活力与吸引力的研究课…

安卓开源库之动画篇

本文主要介绍收集了笔者所用过的开源动画库,达到一些比较好看的效果。 一个富有动感的 Sheet 链接: zzz40500/AndroidSweetSheet: 一个富有动感的Sheet(选择器) 效果如下 示例代码 package com.zj.testsheet;import android.os.Bundle; import andr…

《Python 黑科技》代理ip奇技淫巧

点赞 ➕ 评论 ➕ 收藏 三连再看你最帅 目录 🐛 1、什么是住宅动态ip? 🦋 1.1 动态ip优点是什么? 🐌 1.2 环境准备 🐞 1.3 获取代理ip 🐜 2、使用代理IP 🐤 2.1 浏览器使用代理…

【转】android Notification 的使用

http://www.cnblogs.com/newcj/archive/2011/03/14/1983782.html Intent.FLAG_ACTIVITY_CLEAR_TOP :如果在当前Task中,有要启动的Activity,那么把该Acitivity之前的所有Activity都关掉,并把此Activity置前以避免创建Activity的实例…

MIT发布2018年全球10大突破性技术!

来源: 数字化企业作为全球最为著名的技术榜单之一,《麻省理工科技评论》全球十大突破性技术具备极大的全球影响力和权威性,至今已经举办了18年。每年上榜的技术突破,有的已经在现实中得以应用,有的还尚需时日&#xff…

Android实现监测网络状态

本文主要用到了安卓监测网络状态变化功能,实现了WIFI,3G,无网络状态切换时发出通知的功能。 主要知识点 servicebroadcast接口回调实现 service的基本知识 service可分为 按运行地点分类 本地服务 远程服务 按按运行类型分类: 前台服务后台服务按…

《Python 黑科技》10万粉丝头像千图成像(撩对象)

点赞 ➕ 评论 ➕ 收藏 = 三连再看你最帅 目录 🍏 1、效果预览 🍎 2、代码实现 🍑 2.1 获取粉丝列表

jni 步骤

这是我转的文章,是篇外文翻译,将介绍如何学习安装 Android NDK 并开始使用它。在这一教程结束后,将创建你自己的项目,从 Java 代码简单地调用原生C 语言代码。教程细节技术:Android SDK、NDK、C 语言难度:进…

德勤:2025年汽车行业价值链的四个合理情境

来源:亿欧摘要:近日,德勤发布《未来汽车行业价值链:2025年以后》,假设在大部分整车企业都有变革意愿的情境下,识别出四个2025年整车企业价值链可能具有的合理设定。随着自动驾驶、共享经济等新技术以及新商…

你真的会用 regexp_replace 吗?

一、替换单个 方法1:select regexp_replace(asdgggg,([asd]),"aaa") 方法2:select regexp_replace(asdgggg,asd,"aaa") 二、替换多个 目标:一次性替换掉 [,],",三个特殊字符 方法1:SELECT regexp_repl…

盘点英特尔、苹果、高通、AMD 处理器重大 Bug,硬件的坑软件能填?

来源:21ic电子网英特尔的CPU存在两大漏洞 ——Meltdown 和 Spectre,波及自 1995 年以来所有使用英特尔芯片的硬件设备。不止 Linux、Android、Windows、苹果 OS X 等操作系统,AWS、Azure、谷歌云等云计算提供商均受到影响,其威胁范…

java读写html文件时出现中文乱码问题的解决方法

最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。然后,替换相关标签写到指定的文件中。无论是读写,都遇到了中文乱码问题。试过多种方法,发现下面一种可以避免中文乱码。(无论读取还是写入一定要进行编码转…

Android实现网络音乐播放器

本文是一个简单的音乐播放器 布局代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layo…

《Python 黑科技》程序员必须会的代理ip小技巧

点赞 ➕ 评论 ➕ 收藏 = 三连再看你最帅 目录 一、🚖 why 代理 ip 第一,独享 IP 提高网络速度

每天一个linux命令(54):ping命令

Linux系统的ping命令是常用的网络命令&#xff0c;它通常用来测试与目标主机的连通性&#xff0c;我们经常会说“ping一下某机器&#xff0c;看是不是开着”、不能打开网页时会说“你先ping网关地址192.168.1.1试试”。它通过发送ICMP ECHO_REQUEST数据包到网络主机&#xff08…

【干货51页PPT】深度学习理论理解探索

来源&#xff1a;专知普林斯顿大学计算机科学系教授Sanjeev Arora做了深度学习理论理解探索的报告&#xff0c;包括三个部分&#xff1a;Why overparametrization and or overprovisioning?Optimization in deep learningTheory for Generative Models and Generative Adversa…

新星计划·第三季【博文流量密码公开课】

一、优质的内容 刚开始写博客的小伙伴&#xff0c;其不可漫无目的的写&#xff0c;到头来对自己的技术沉淀毫无帮助&#xff0c;升职加薪跳槽也不加分&#xff0c;更无法通过付费专栏等方式进行变现&#xff0c;到头来一无所获&#xff01; 强烈建议大家提前规划写什么方向的…

百度地图开发之定位

本文主要讲述利用百度地图API实现定位功能 第一步:下载SDK与申请KEY 参考链接&#xff1a;Android 百度地图 SDK v3.0.0 &#xff08;一&#xff09; - Hongyang - 博客频道 - CSDN.NET 注意 百度地图SDK与百度定位SDK已经分开了&#xff0c;如果在工程中同时导入这两个包…

Java与Http协议

Java与Http协议 引言 http&#xff08;超文本传输协议&#xff09;是一个基于请求与响应模式的、无状态的、应用层的协议&#xff0c;常基于TCP的连接方式。HTTP协议的主要特点是&#xff1a; 1.支持客户/服务器模式。 2.简…

《Python 黑科技》一键分析评论关键词,制作精美词云

本文重点&#xff1a; 学会抓取文章评论 学会文本分词、制作词云 目录 &#x1f351; 一、抓取全部评论 &#x1f35e; 1、找到评论接口 &#x1f34f; 2、Python 获取评论 &#x1f3c8; 二、文本分词、词云制作 &#x1f34b; 1、文本分析 &#x1f350; 2、生成词云…