分享好友 最新动态首页 最新动态分类 切换频道
【Linux C | 网络编程】地址结构(sockaddr_in、sockaddr)、字节序转函数(htonl、htons、ntohl,ntohs)、IP转换函数
2024-12-26 09:43

😁博客主页😁🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣🍭介绍 🍭
😎金句分享😎🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:2024-01-29 20:30:30
⏰复习时间⏰:2024-02-27 11:35:15

【Linux C | 网络编程】地址结构(sockaddr_in、sockaddr)、字节序转函数(htonl、htons、ntohl,ntohs)、IP转换函数

本文未经允许,不得转发


本文介绍网络编程的一些基础知识。在网络编程中,我们很多时候都需要准备地址结构的,下面先介绍三种需要用到的地址结构以及使用场景。然后介绍网络字节序相关的几个函数。最后再介绍IP地址转换的几个函数。这些知识是网络编程的必备基础知识。


IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以命名,定义在头文件中。结构体定义如下

 
  • :始终设置为。
  • :用表示的端口。
  • :是IP主机地址。结构的成员是表示的IP地址。应被分配一个INADDR_*值(例如,INADDR_ANY,或使用inet_aton、inet_addr、inet_makeaddr库函数进行设置。

使用场景:一般用来构造IPv4的地址结构,然后用于bind、connect等函数。


通用套接字地址结构以命名,定义在头文件中。结构体定义如下

 
    • AF_INET 表示 IPv4
    • AF_INET6 表示IPv6
    • AF_UNIX 表示unix
    • AF_APPLETALK 表示ddp
    • AF_PACKET 表示packet
    • AF_X25 表示x25
    • AF_NETLINK 表示netlink。
  • :协议指定的IP地址、端口等信息。

使用场景:一般不会定义实际变量,只用来做强制转换,将协议指定的套接字地址结构强制转换后传递给需要该地址的套接字函数(如:等)。

使用作为传入参数的函数;作为传出参数的函数:。

为什么需要强制转换?因为不同协议的地址结构不同,但套接字函数却只要一个,所以需要定义一个指针作为参数来使用各个协议的结构体,所以将结构体地址传给套接字函数时需要强制转换成通用套接字地址结构指针()。


IPv6套接字地址结构以命名,定义在头文件中。结构体定义如下

 

使用场景:一般用来构造IPv6的地址结构,然后用于bind、connect等函数。


数据在内存中的存储有两种方式

  • 小端字节序(little-endian):低位字节存储在低位地址
  • 大端字节序(big-endian):低位字节存储在高位地址

网际协议使用大端字节序来传输多字节整数,一般的Linux主机是小端字节序的。这就需要做转换,Linux编程时,可以使用下面4个函数做字节序转换

 

上面几个函数中,表示,表示,表示,表示。
:将一个型数据,从主机字节序转换到网络字节序
:将一个型数据,从主机字节序转换到网络字节序
:将一个型数据,从网络字节序转换到主机字节序
:将一个型数据,从网络字节序转换到主机字节序

的IP地址转换函数inet_aton、inet_addr、inet_ntoa
的IP地址转换函数inet_pton、inet_ntop

inet_aton、inet_addr、inet_ntoa这几个函数可以将的IP地址在和两种形式之间相互转换。

 
  • :将形式IP地址转换为形式的IP地址;

    • 参数
      cp:传入参数,点分十进制的IP地址字符串
      inp:传出参数,用来存储转换后的32位网络字节序IP地址的二进制值
    • 返回值:字符串有效返回1,否则返回0
  • :将形式IP地址转换为形式的IP地址;

    • 参数
      cp:传入参数,点分十进制的IP地址字符串
    • 返回值:字符串有效返回32位网络字节序IP地址的二进制值;无效返回(数值-1),该函数无法转换,因为这个字符串返回也是-1。要避免这个问题的话,可以使用。
  • :将一个32位的网络字节序二进制IPv4地址转换成相应的点分十进制数串。

    • 参数
      in:传入参数,32位的网络字节序二进制IPv4地址
    • 返回值:返回:指向一个点分十进制数串的指针

    注意,返回值所指向的字符串驻留在静态内存中。如果其他线程也调用该函数,会修改字符串的值。

例子

 
 

inet_pton、inet_ntop 是随IPv6出现的新函数,对于IPv4地址和IPv6地址都适用。函数名中和分别代表表达(presentation)和数值(numeric)。地址的表达格式通常是ASCII字符串,数值格式则是存放到套接字地址结构中的二进制值。

 
  • :将src指向的形式IP地址转换为形式的IP地址并存放在dst的内存
    • 参数
      af:表示地址协议,可以是(IPv4),也可以是(IPv6)
      src:传入参数,点分十进制的IP地址字符串
      dst:传出参数,用来存储转换后的数值形式IP地址结果
    • 返回值:若成功则为1,若输入不是有效的表达格式则为0,若出错则为-1。
  • :将src指向的形式的IP地址转换为形式IP地址并存放在dst的内存
    • 参数
      af:表示地址协议,可以是(IPv4),也可以是(IPv6)
      src:传入参数,数值形式IP地址
      dst:传出参数,用来存储转换后的结果
      size:是dst指向的内存的大小,以免发生溢出。如果size太小,不足以容纳表达格式结果(包括结尾的空字符),那么返回一个空指针,并置errno为ENOSPC。size的取值参考下面两个宏定义。
       
    • 返回值:若成功则为指向结果的指针,若出错则为NULL。

例子

 
 

👉本文详细介绍Linux系统网络编程的基础知识,包括套接字地址结构(sockaddr_in、sockaddr、sockaddr_in6)、字节序转函数(htonl、htons、ntohl,ntohs)、IP转换函数(inet_aton、inet_addr、inet_ntoa、inet_pton、inet_ntop)。

最新文章
百度优选陶瓷紫砂类目怎么开通呢?分享
百度优选陶瓷紫砂类目怎么开通呢?目前电商已经进入了全域电商阶段,当经营好一个平台后,想要突破瓶颈呢,目前是应该是比较难的,所以很多商家朋友呢,都会选择复制成熟的模式,到其他电商平台呢去实现多平台经营,那今年百度电商平台呢,
【iPhone 5(8GB/低配版)高德地图下载】苹果IPHONE5C高德地图0.6.2免费下载
高德地图--不止路熟,吃喝玩乐行都熟!2021年,高德地图宣布向“出门好生活开放服务平台”升级,推出全新品牌Slogan:高德地图,哪儿都熟!高德地图不止路熟,你想要的路线也熟高德地图不止路熟,酒店也熟高德地图不止路熟,景区也熟高德地
高清美女写真一键生成!如何用AI轻松创造你的数字女友?
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个数字化快速发展的时代,AI技术已经深入到我们的日常生活中,尤其是在照片生成和图像处
【大黄蜂V5应用宝下载】天语大黄蜂V5应用宝8.8.6免费下载
(Android)是腾讯应用中心倾力打造的手机应用商店,致力于为用户丰富、优质、个性化的安卓软件资源和一站式的下载管理体验,全方位覆盖用户的下载、管理、收藏、分享、等多样化需求应用宝2024更新内容1、修复了一些已知的bug应用宝6.7更新
回溯算法在信息技术领域的应用与解析
1.回溯函数模板返回值以及参数 回溯函数名:backtracking 返回值:一般为 void 1.参数:(1)要遍历哪个数组或者字符串(2)在下一层 for 循环中遍历的起始位置在哪 2.回溯函数终止条件 3.回溯
有哪些免费的行情软件站可以让安卓用户轻松获取股市行情数据
在如今的股市投资环境中,实时行情数据对于投资者来说至关重要。无论是股民还是期货、外汇投资者,了解精准的市场动态才能做出及时且有效的投资决策。随着智能手机的普及,越来越多的人开始选择通过手机软件来获取实时行情数据,尤其是安卓
苹果设置锁屏不显示详细内容 , 苹果手机锁屏微信消息不显示内容怎么设置
苹果设置锁屏不显示内容,可以在“设置”中的“通知”里进行调整。首先,苹果用户需要了解,iOS系统为了保护用户的隐私,允许在锁屏状态下隐藏通知内容。这样一来,即使用户的手机处于锁屏状态,通知信息也不会直接显示在屏幕上,从而在一
超级简单的Python爬虫入门教程(非常详细),通俗易懂,看一遍就会了_爬虫python入门
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。 需要这份系统化学习资料的朋友,可以戳这里获取 一个人可以走的很快,但一群人
智伴AI智能机器人:开启智能化生活的新纪元
引言:随着科技的不断发展,人工智能已经成为各行各业的热门话题。而在这个快速变化的时代,AI智能机器人越来越多地进入人们的生活,并带来了巨大的改变。本文将介绍智伴AI智能机器人这一行业的发展现状、影响和前景。一、智伴AI智能机器人
肇庆SEO外包服务,性价比解析与收费明细一览
肇庆SEO外包服务提供高效优化方案,以合理助力企业提升网站排名。服务涵盖关键词研究、内容优化、链接建设等,收费明细透明,助力企业以较低成本获得最佳SEO效果。随着互联网的快速发展,越来越多的企业开始重视网络营销,而SEO(搜索引擎
相关文章
推荐文章
发表评论
0评