深入解析sockaddr和sockaddr_in:结构、区别与联系 百度竞价推广营销目标是
栏目:广告资讯 发布时间:2026-01-15
一、 在/usr//bits/.h下,查看的结构:<p style=‘margin-bottom:15px;color:#555555;font-siz

一、

在/usr//bits/.h下,查看的结构:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="prettyprint"><code class=" hljs haskell"><span class="hljs-title">struct</span> sockaddr   { 让 sa_ 可以反映 SOCKADDR_COMMON ;<span class="hljs-type">Common</span> <span class="hljs-typedef"><span class="hljs-keyword">data</span>: address <span class="hljs-keyword">family</span> and length.  协议族 */</span> char sa_data[<span class="hljs-number">14</span>];  /* <span class="hljs-type">Address</span> <span class="hljs-typedef"><span class="hljs-keyword">data</span>.  地址+端口号*/</span>   };</code></pre></p>

其缺陷在于把目标地址与端口信息给混在一起了。而它则解决了这一缺陷,把端口号和 IP 地址分别进行存储。

二、

在/usr///in.h下,

查看的结构:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="prettyprint"><code class=" hljs objectivec"><span class="hljs-keyword">struct</span> sockaddr_in {   __SOCKADDR_COMMON (sin_);<span class="hljs-comment">常见数据包括地址族和长度。</span>   in_port_t sin_port;  <span class="hljs-comment">/* Port number.  16位端口号*/</span> <span class="hljs-keyword">struct</span> in_addr sin_addr;<span class="hljs-comment">这是一种互联网地址,其长度为 32 位。它主要用于在网络中标识设备或节点的位置。通过 32 位的 IP 地址,可以在全球范围内唯一地确定一台计算机或其他网络设备。</span>   <span class="hljs-comment">填充到“struct sockaddr”的大小。用于填充的是 0 字节。</span> <span class="hljs-keyword">unsigned</span> <span class="hljs-keyword">char</span> sin_zero[<span class="hljs-keyword">sizeof</span> (<span class="hljs-keyword">struct</span> sockaddr) - __SOCKADDR_COMMON_SIZE - <span class="hljs-keyword">sizeof</span> (in_port_t) - <span class="hljs-keyword">sizeof</span> (<span class="hljs-keyword">struct</span> in_addr)]; }; <span class="hljs-keyword">typedef</span> uint32_t in_addr_t; <span class="hljs-keyword">struct</span> in_addr {   in_addr_t s_addr; <span class="hljs-comment">//32位IPV4地址</span>   }; <span class="hljs-comment">/* Ditto, for IPv6.  */</span> <span class="hljs-keyword">struct</span> sockaddr_in6 { __SOCKADDR_COMMON (sin6_);   in_port_t sin6_port;  <span class="hljs-comment">/* Transport layer port # */</span> uint32_t sin6_flowinfo;  <span class="hljs-comment">/* IPv6 flow information */</span>   <span class="hljs-keyword">struct</span> in6_addr sin6_addr;  <span class="hljs-comment">/* IPv6 address */</span>   uint32_t sin6_scope_id;  <span class="hljs-comment">/* IPv6 scope-id */</span> };</code></pre></p>

三、两者之间的区别与联系

我们来看一下与的结构:

二者占用的内存大小是相同的,所以能够互相转化,从这个意义来看,它们没有区别。

区别:常用于 bind 等函数的参数,其作用是指明地址信息,并且它是一种通用的套接字地址。

它是环境下套接字的地址形式。因此在网络编程里我们要对结构体进行操作。通过它来构建所需的信息,最后进行类型转化就可以达成目的。

举个简单的例子:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="prettyprint"><code class=" hljs cpp"><span class="hljs-keyword">int</span> main() {   <span class="hljs-keyword">int</span>sock 被创建,其使用的地址族为 AF_INET,套接字类型为 SOCK_STREAM,具体创建方式为 socket(AF_INET, SOCK_STREAM, 。<span class="hljs-number">0</span>);<span class="hljs-comment">//获得fd</span>   <span class="hljs-keyword">if</span>(sock < <span class="hljs-number">0</span>){   <span class="hljs-built_in">printf</span>(<span class="hljs-string">"create sock error\n"</span>);   } <span class="hljs-keyword">struct</span> sockaddr_in my_socket; bzero(&server_socket,<span class="hljs-keyword">sizeof</span>(server_socket));<span class="hljs-comment">//初始化结构体</span> my_socket 的 sin_family 被设置为 AF_INET 。<span class="hljs-comment">//设置协议家族</span> 将 my_socket 的 sin_addr 的 s_addr 设置为 htonl(INADDR_ANY);<span class="hljs-comment">//设置IP地址</span> 把 my_socket 的 sin_port 赋值为 htons(PORT);<span class="hljs-comment">//设置端口号</span> bind(sock, (<span class="hljs-keyword">struct</span> sockaddr*)&server_socket, <span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> sockaddr_in));<span class="hljs-comment">//绑定</span> ... }</code></pre></p>

在初始化某种类型的结构体时,调用了 htons 函数以及另一个函数。

htons函数将端口号由主机字节转换为网络字节序的整数值。

函数将一个IP字符串转换为一个网络字节序的整数值。

四、网络字节序与主机字节序

1.主机字节序

我们平常所说的有大端和小端模式。大端模式是低地址存放高字节,小端模式是低地址存放低字节。不同的 CPU 具有不同的字节序类型,而这些字节序指的是整数在内存中保存的顺序,这种顺序被称为主机序。

2.网络字节序

内存地址存在大小端的区别,网络数据流也有大端和小端的分别。发送主机一般会按照内存地址从低到高的顺序,将发送缓冲区中的数据发送出去。接收主机把从网络上接收到的字节,依次保存在接收缓冲区中,同样是按照内存地址从低到高的顺序进行保存。所以,对于网络数据流的地址有这样的规定:先发出的那个数据对应的是低地址,后发出的数据对应的是高地址。

以下是 4 个字节的 32bit 值传输的次序:首先传输 0 到 7bit,接着传输 8 到 15bit,然后传输 16 到 23bit,最后传输 24 到 31bit。这就是大端字节序,并且 TCP/IP 首部中所有的二进制整数在网络传输时都要求这种次序。

主机字节序与网络字节序的转换函数

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="prettyprint"><code class=" hljs vala"><span class="hljs-preprocessor">#include <a style='color:#0000CC;font-size:15px;' rpa/inet.h></span> <span class="hljs-comment">/*将32位的长整数从主机字节序转换为网络字节序,*/</span> 定义了一个名为 htonl 的函数,该函数的返回值类型为 uint32_t,参数也为 uint32_t 类型,其功能是将主机字节序的 32 位整数转换为网络字节序的 32 位整数。 <span class="hljs-comment">/*将16位的短整数从主机字节序转换为网络字节序,*/</span> 定义一个函数 htons,它接受一个 uint16_t 类型的参数 hostshort,并返回一个 uint16_t 类型的值。 <span class="hljs-comment">/*将32位的长整数从网络字节序转换为主机字节序,*/</span> 定义一个函数 ntohl,它接收一个无符号 32 位整数 netlong 作为参数,函数的返回值也是一个无符号 32 位整数。 <span class="hljs-comment">/*将16位的短整数从网络字节序转换为主机字节序,*/</span> 定义一个函数名为 ntohs,该函数接收一个无符号 16 位整数类型的参数 netshort,并返回一个无符号 16 位整数类型的值。</code></pre></p>

这样记忆,h 代表的是本地主机,n 代表的是网络,l 是无符号长整型。

如果是小端字节序,这些函数会将参数转换为大端后进行返回;如果是大端字节序,不会进行转换,直接返回。

我们通常为了简化编程,会设置 IP 地址。若需要使用特定的 IP 地址,就需要进行字符串和结构体的互换操作。其中有一个成员,它代表着 IP 地址。

五、函数&函数

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="prettyprint"><code class=" hljs cs"><span class="hljs-comment">//inet_addr函数</span> unsigned <span class="hljs-keyword">long</span> inet_addr(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>* cp);<span class="hljs-comment">//cp代表点分十进制</span> <span class="hljs-comment">//inet_nota函数</span> <span class="hljs-keyword">char</span>* inet_nota(<span class="hljs-keyword">struct</span> in_addr <span class="hljs-keyword">in</span>);</code></pre></p>

举个例子:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="prettyprint"><code class=" hljs avrasm"> SOCKADDR_IN sock<span class="hljs-comment">;  </span> sock<span class="hljs-preprocessor">.sin</span>_family = AF_INET<span class="hljs-comment">;  </span> //将字符串转换为in_addr类型   sock<span class="hljs-preprocessor">.sin</span>_addr<span class="hljs-preprocessor">.S</span>_un<span class="hljs-preprocessor">.S</span>_addr =  inet_addr(<span class="hljs-string">"192.168.1.111"</span>)<span class="hljs-comment">;  </span> sock<span class="hljs-preprocessor">.sin</span>_port = htons(<span class="hljs-number">5000</span>)<span class="hljs-comment">;  </span> //将in_addr类型转换为字符串   printf(<span class="hljs-string">"inet_ntoa ip = %s\n"</span>,inet_ntoa(sock<span class="hljs-preprocessor">.sin</span>_addr))<span class="hljs-comment">;</span></code></pre></p>

结果: ip =192.168.1.111


# 广东企业网站优化供应商  # 会将  # 荥阳网站建设哪家好  # 企业网站推广哪家不错  # seo网站推广实例分析  # 教材推广图片素材下载网站  # 江油网站推广营销  # 网站建设杭州哪家便宜  # 动态网站建设方案公司  # 岱岳区全网营销推广费用  # 品牌网站维护推广  # 这是一种  # 荔湾网站推广优化  # 百度seo营销推广 备案  # 如何屏蔽网站建设  # 餐饮推广网站有哪些平台  # 佛山seo服务  # 苏州seo兼职  # 塘厦品牌网站建设  # seo怎么做软文  # 复兴区网络营销和推广  # seo电商必备技能  # 这一  # 深入解析sockaddr和sockaddr_in  # 结构、区别与联系  # 转换为  # 的是  # 端口号  # 它是  # 一个函数  # 设置为  # 区中  # 返回值  # 深入解析sockaddr和sockaddr_in:结构、区别与联系  # 互联网  # 也有  # 这就是  # 一台  # 所需  # 或其他  # 被称为  # 要对  # 也为 


相关文章: 良好生态是普惠民生福祉,打野热潮却致生态资源危机?   网站的建设与 *** 营销的成功之道,成功网站建设和 *** 营销的关键要素,策略与实践  互联网+环境下新手如何做网络推广?网站规划与搜索引擎定位解析   海口网站 *** ,打造专业形象,助力企业腾飞,海口专业网站定制,塑造企业品牌新形象,海口企业品牌新形象定制,专业网站 *** ,助力腾飞发展  互联网营销必看!百度搜索框下拉词优化关键词实战经验   热门同人文如何阻止男主发疯*化引抵制,版权何去何从?   邢台网站建设,助力企业互联网转型,开启数字营销新篇章,邢台企业互联网转型新动力,数字营销新篇章启航,邢台企业互联网转型与数字营销新篇章启航  西安网站优化,提升企业在线竞争力的关键策略,西安企业网站优化攻略,解锁在线竞争力新篇章  微信的诞生与演变:从初登场到全面繁荣,功能如何不断拓展?   南京陈女士注销微信号遇假客服,被骗6万多,如何安全处置社交账号?   爱情里的偏爱:微信备注藏真心,这样备注你的男人超爱你   10月16日市场监管总局通告39批次食品不合格情况   2025年抖音超长知识视频成现象级爆款,你看过吗?   数字化浪潮下开发小程序要多少钱?多因素影响成本几何?   微信朋友圈自定义位置功能介绍,如何操作看这里?   微信竟有免费不限存放相册空间,快删手机照片视频   扬中网站建设,打造数字化时代的企业新名片,扬中企业数字化升级,网站建设,塑造时代新名片  温州网站 *** ,打造个性化企业门户,助力企业线上发展,温州企业专属门户定制,专业网站 *** 助力线上腾飞,温州企业专属门户定制,专业网站 *** 助力线上腾飞  杭州,互联网创业者的摇篮,专业网站建设助力企业腾飞,杭州,互联网创业圣地,专业网站建设助推企业飞跃,杭州,互联网创业圣地,专业网站建设赋能企业飞跃  微信群友发布*视频,群主罗某为何被判刑半年?   洛阳网站建设,助力企业互联网转型升级,洛阳企业互联网转型新引擎,专业网站建设服务  杭州网站设计,打造独特视觉体验,助力企业 *** 营销,杭州专业网站设计,塑造企业个性视觉,赋能 *** 营销,杭州专业网站设计,定制独特视觉,助力企业 *** 营销飞跃  佛山网站推广策略,助力企业在线腾飞,佛山企业在线腾飞,全方位网站推广策略解析  鄂州网站建设,打造地方品牌新名片,助力企业互联网发展,鄂州品牌新起航,网站建设助力企业互联网腾飞  海南网站设计,打造个性化 *** 品牌的新风尚,海南定制网站设计,塑造独特 *** 品牌形象的风潮,海南定制网站设计,引领个性化 *** 品牌潮流  探索网站盈利之路——从策略到实践,从策略到实践,探究网站的盈利之道  微信成国民应用引不法分子觊觎,上线新功能严打非法放贷   网络营销的10种办法,你知道几种?常用方法介绍   开心一刻:超市主管的脸、幸福的背影及各种幽默趣事   东莞手机网站建设,助力企业数字化转型的关键一步,东莞企业数字化转型新引擎,手机网站建设攻略,东莞企业数字化转型新引擎,手机网站建设攻略  微信朋友圈支持发实况照片啦!发布流程及条件你知道吗?   微信聊天记录怎么恢复?不同情况不同方法,速来学习   学校网站系统,构建现代教育信息化的桥梁,现代教育信息化桥梁,学校网站系统构建之道  旺旺和旺仔是父子?你不知道的旺旺冷知识。。。  长沙营销型网站建设,助力企业在线腾飞的新引擎,长沙企业在线腾飞新引擎,专业营销型网站建设服务  1.76 怀旧版传奇网页版邀你开启新篇章!中年女人微信哪些字暗示动情?   今年理财市场低迷,微信平台万能险受热捧但并非人人适合?   陈坤微信开明星会员制先河,杨幂微信早期吸粉百万?   微信好友删除后聊天记录能恢复吗?掌握方法定期备份很重要   女生喜欢你的表现:分享生活点滴、给专属备注,融入你的生活   深圳网站空间,助力企业互联网发展的基石,深圳优质网站空间,企业互联网腾飞之基  微信视频如何同步到视频号?转发别人视频号动态步骤全解析   微信右上角+号藏玄机!教你检测好友是删是拉黑?   汉中建网站,助力古城焕发新活力,推动区域经济发展,汉中古城焕新,网站建设助力区域经济腾飞  微信验证遇难题?四种实用替代方案助您轻松解决   360再发内部邮件:禁止员工用微信讨论工作,违规将罚款   打造优秀个人网站,展现自我风采的数字舞台,数字舞台,打造个人网站,尽显独特风采  抖音超火特效:阿丽塔、草莓外,白菜叶敷面膜特效在哪?怎么弄?   石家庄网站优化,提升网站流量与用户体验的秘诀解析,石家庄网站优化攻略,揭秘流量与用户体验双提升之道,石家庄网站优化攻略,流量与用户体验双提升秘诀揭秘  云南网站 *** ,打造专业、高效的互联网平台,云南专业高效互联网平台定制专家,云南专业互联网平台定制服务专家——网站 *** 首选 


相关栏目: 【 广告资讯90366 】 【 广告推广18483 】 【 广告优化154267 】 【 广告营销46464