sockaddr结构体、sockaddr_in结构体和gethostbyname函数

在这里插入图片描述

sockaddr结构体

sockaddr结构体是在网络编程中经常使用的一个数据结构,用来表示套接字地址。它是一个通用的地址结构,可以用于不同的协议(如IPv4、IPv6、UNIX等)。

在C语言中,sockaddr结构体定义如下:

struct sockaddr {unsigned short sa_family;  // 地址族,用于指定地址类型,例如AF_INET(IPv4)char sa_data[14];          // 地址数据,具体格式和长度取决于地址族的不同
};

其中,sa_family字段用来指定地址族,即地址类型,常见的取值有AF_INET(IPv4)、AF_INET6(IPv6)和AF_UNIX(UNIX域套接字)等。sa_data字段用来存储实际的地址数据,其格式和长度会根据地址族的不同而变化。

为了方便使用,通常会使用sockaddr的变体结构sockaddr_in(用于IPv4地址)和sockaddr_in6(用于IPv6地址),它们在sockaddr结构体的基础上进行了扩展,增加了一些额外的字段来保存特定类型的地址信息。

总之,sockaddr结构体是网络编程中用来表示套接字地址的通用数据结构,通过指定sa_family字段和存储实际地址数据的sa_data字段,可以灵活地表示不同类型的套接字地址。

sockaddr_in结构体

sockaddr_in结构体是在网络编程中用于表示IPv4地址的数据结构,是sockaddr结构体的一个变体。

在C语言中,sockaddr_in结构体定义如下:

struct sockaddr_in {sa_family_t sin_family;      // 地址族,固定为AF_INETin_port_t sin_port;          // 端口号,使用网络字节序(大端序)struct in_addr sin_addr;     // IPv4地址char sin_zero[8];            // 填充字段,通常设置为0
};

其中,sin_family字段指定地址族,固定为AF_INET,表示使用IPv4地址。sin_port字段用于存储端口号,采用网络字节序(大端序),需要使用htons函数进行转换。sin_addr字段是一个struct in_addr类型的结构体,用于保存IPv4地址。而sin_zero字段用于填充,通常设置为0。

struct in_addr结构体定义如下:

struct in_addr {in_addr_t s_addr;    // IPv4地址,使用网络字节序(大端序)
};

其中,s_addr字段用于存储IPv4地址,同样需要使用htonl函数进行字节序转换。

通过sockaddr_in结构体,我们可以方便地表示和操作IPv4地址和端口号。在实际网络编程中,我们可以使用该结构体来指定套接字的本地或远程地址,进行网络通信。

gethostbyname函数

gethostbyname函数是一个网络编程中常用的函数,它用于通过主机名获取主机的相关信息。它的原型如下:

struct hostent *gethostbyname(const char *name);

该函数接收一个主机名作为参数,并返回一个指向hostent结构体的指针。hostent结构体定义如下:

struct hostent {char *h_name;           // 官方主机名char **h_aliases;       // 别名列表int h_addrtype;         // 地址类型int h_length;           // 地址长度char **h_addr_list;     // 地址列表
};

gethostbyname函数通过主机名查询DNS服务器,获取与主机名相关联的IP地址信息。它返回的hostent结构体包含了一些与主机相关的信息,例如官方主机名、别名列表以及主机的IP地址列表。

使用gethostbyname函数的一般步骤是:

  1. 调用gethostbyname函数,传入要查询的主机名作为参数。
  2. 检查返回的指针是否为NULL,如果为NULL则表示查询失败。
  3. 通过返回的hostent结构体指针获取需要的信息,例如官方主机名和IP地址。

字符串IP与大端序IP的转换

在这里插入图片描述

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

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

相关文章

交换两个整数

交换两个整数 题目描述:解法思路:解法代码:运行结果: 题目描述: 写⼀个函数Swap,可以交换两个整数的内容。注意必须实现成函数完成。 输入2个整数,调用自定义函数Swap,完成2个整数的…

【HarmonyOS】鸿蒙开发之Stage模型-基本概念——第4.1章

Stage模型-基本概念 名词解释 AbilityStage:应用组件的“舞台“ UIAbility:包含UI界面的应用组件,是系统调度的基本单元 WindowStage:组件内窗口的“舞台“ Window:用来绘制UI页面的窗口 HAP:Harmony Ability Package(鸿蒙能力类型的包) HSP:Harmony Sh…

C++17之折叠表达式

相关文章系列 深入理解可变参数(va_list、std::initializer_list和可变参数模版) 目录 1.介绍 2.应用 2.1.使用折叠表达式 2.2.支持的运算符 2.3.使用折叠处理类型 3.总结 1.介绍 折叠表达式是C17新引进的语法特性。使用折叠表达式可以简化对C11中引入的参数包的处理&…

合泰杯开发板HT66F2390入门教程(点亮LED灯)——获得成就:点灯大师

前言 前不久报名了合泰杯竞赛项目,然后手上也是有一个HT66F2390的开发板,我就打算先从点灯开始,学习一个新的芯片第一步都是先成为点灯大师。 一开始,我在网上搜寻了许多的代码示例,希望能够顺利实现LED的控制。然而&…

LeetCode第七题: 整数反转

题目描述 给你一个 32 位的有符号整数 x​ ,返回将 x​ 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1]​ ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 …

铭瑄科技——为星闪技术发展与应用带来新推力

随着智能化生活逐渐普及,无线通信不仅是不仅是信息时代的重要基础设施,而且是推动社会向智能化发展的核心力量之一,其中短距无线通信更是推动未来智能化发展的关键。 为积极推动未来硬件智能化、产业智能化发展,铭瑄正式宣布成为星…

黑马头条-day10

文章目录 app端文章搜索1、文章搜索1.1 ElasticSearch环境搭建1.2 索引库创建①需求分析②ES导入数据场景分析③创建索引和映射 1.3 索引数据同步①app文章历史数据导入ES②文章实时数据导入ES 1.4 文章搜索多条件复合查询①关键词搜索②搜索接口定义 2、搜索历史记录2.1 需求说…

积分商城管理系统的设计与实现

积分商城管理系统的设计与实现 获取源码——》公主号:计算机专业毕设大全

javascript给对象添加迭代器

迭代器是啥就自行百度了 为啥for…of可以遍历数组,为啥不能遍历对象,就是for…of会调用迭代器,而数组是内置了迭代器了,而对象没有内置,所以直接使用for…of遍历对象会报错,因此只用在对象的原型上面自定义…

YOLO算法改进Backbone系列之:EfficientViT

EfficientViT: Memory Effificient Vision Transformer with Cascaded Group Attention 摘要:视觉transformer由于其高模型能力而取得了巨大的成功。然而,它们卓越的性能伴随着沉重的计算成本,这使得它们不适合实时应用。在这篇论文中&#x…

一般情况下,硬件中使用Repeating Sequence出现波形很奇怪就是数据的周期频率和mcu运行的频率不一致导致的

一般情况下,出现波形很奇怪就是数据的周期频率和mcu运行的频率不一致导致的 把timer values 修改为0 1就好了,如果是0,0.1就不行,不会有下面的波形

YOLOv9中的“RepNCSPELAN4”结构!

RepNCSPELAN4结构出炉啦,收藏起来写论文用! 1.代码: 代码路径:yolov9-main->models->common.py,代码如下: class RepNCSPELAN4(nn.Module):# csp-elandef __init__(self, c1, c2, c3, c4, c51): # …

使用EFCore连接SQLite

简介 在使用EFCore连接SQLite之前我们先来了解一下SQLite SQLite是一个轻量级、自包含、无服务器、零配置的事务性SQL数据库引擎,它支持SQL92标准的大多数查询语言并兼容ACID事务。具体如下: 轻量级:SQLite非常轻巧,它的库体积…

UE5 C++ Gas开发 学习记录(三)

添加AuraPlayerState,AuraAbilitySystemComponentBase和AuraAttributeSet 在Build.cs里添加 // Copyright Epic Games, Inc. All Rights Reserved. using UnrealBuildTool; public class MyGas : ModuleRules { public MyGas(ReadOnlyTargetRules Target) : base(Target) { P…

leetcode hot100打家劫舍三

本题是打家劫舍的变形,数据结构是树形。涉及到树的题目一定要想清楚树的遍历顺序(前中后序)。之后再考虑利用动态规划来解决。 动态规划是一直记录状态,我们可以根据动态规划的数组来记录变化的状态,最终求的自己想要…

Python字符串访问与拼接你搞懂了吗?

使用下标访问字符串,从0开始计数,-1表示最后一个字符。三种遍历字符串的方法:for循环、len()和enumerate()。字符串拼接只能是字符串之间使用,不能与数字拼接。 1.下标访问字符串 通过下标访问字符串的内容,下标从 0 …

Shell脚本介绍及脚本功能

文章目录 一、什么是shell二、hello word2.1 echo2.2第一个脚本 三、Bash的基本功能3.1别名3.2常用快捷键3.3输入输出3.4 输出重定向3.5 多命令执行3.6 管道符3.7 通配符和特殊符号 一、什么是shell Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。S…

视频号视频下载教程:如何把微信视频号的视频下载下来

视频号下载相信不少人都多少有一些了解,但今天我们就来细说一下关于视频号视频下载的相关疑问,以及大家经常会问到底如何把微信视频号的视频下载下来? 视频号视频下载教程 视频号链接提取器详细使用指南,教你轻松下载号视频&…

Django后台管理(二)

一、自定义注册管理类介绍 官网:Django 管理站点 | Django 文档 | Django 注册模型除了使用 Django 默认的管理类admin,也可以自定义,比如: class StudentAdmin(admin.ModelAdmin):pass admin.site.register(Student, StudentAdmin)ModelAdmin 类是管理界面中模型的表示。…

功能富集分析 | GO| KEGG

写在前面 我们《复现SCI文章系列教程》专栏现在是免费开放,推出这个专栏差不多半年的时间,但是由于个人的精力和时间有限,只更新了一部分。后续的更新太慢了。因此,最终考虑后还是免费开放吧,反正不是什么那么神秘的东…