C语言IP地址知识

套接字地址结构 简介大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义它自己的套接字地址结构。这些结构的名字均以“sockaddr_”开头,并以对应每个协议族的唯一后缀结尾。IPv4套接字地址结构IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中。它的定义如下:struct in_addr { in_ 阅读详情

在做服务器开发的时候,需要使用到ip地址。现在基本上服务器都是在ipv4版本里面。本文主要介绍的就是ipv4的方式。
struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。

数据结构定义

sockaddr

struct sockaddr {
        sa_family_t     sa_family;    /* address family, AF_xxx       */
        char            sa_data[14];    /* 14 bytes of protocol address */
}

sa_family :是2字节的地址家族,一般都是“AF_xxx”的形式,它的值包括三种:AF_INET,AF_INET6和AF_UNSPEC。
如果指定AF_INET,那么函数就不能返回任何IPV6相关的地址信息;如果仅指定了AF_INET6,则就不能返回任何IPV4地址信息。
AF_UNSPEC则意味着函数返回的是适用于指定主机名和服务名且适合任何协议族的地址。

sockaddr_in

struct sockaddr_in {
    sa_family_t    sin_family; /* address family: AF_INET */
    in_port_t      sin_port;   /* port in network byte order */
    struct in_addr sin_addr;   /* internet address */
};

sin_family:指代协议族,在socket编程中只能是AF_INET
sin_port:存储端口号(使用网络字节顺序)
sin_addr:存储IP地址,使用in_addr这个数据结构

in_addr

/* Internet address. */
struct in_addr {
    uint32_t       s_addr;     /* address in network byte order */
};

s_addr是个int32的数字;ipv4。

sockaddr_in6

           struct sockaddr_in6 {
               sa_family_t     sin6_family;   /* AF_INET6 */
               in_port_t       sin6_port;     /* port number */
               uint32_t        sin6_flowinfo; /* IPv6 flow information */
               struct in6_addr sin6_addr;     /* IPv6 address */
               uint32_t        sin6_scope_id; /* Scope ID (new in 2.4) */
           };

in6_addr

           struct in6_addr {
               unsigned char   s6_addr[16];   /* IPv6 address */
           };

函数

endian相关

       uint32_t htonl(uint32_t hostlong);
       uint16_t htons(uint16_t hostshort);
       uint32_t ntohl(uint32_t netlong);
       uint16_t ntohs(uint16_t netshort);

这些函数很容易背,h=host,n=network,s=short,l=long。
在做网络操作的时候一定要注意自己本地字节序和网络字节序差别。

ip地址转换工具

int inet_aton(const char *cp, struct in_addr *inp);
struct sockaddr_in adr_inet;
if( !inet_aton("127.0.0.1", &adr_inet.sin_addr))
 char *inet_ntoa(struct in_addr in);
 str_addr = inet_ntoa(session->sin.sin_addr);
如何用C语言获得本机IP地址 (获取一个ip或者获取所有ip) 阅读详情

相关推荐

pta IP地址转化 C语言

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。 输入格式: 输入在一行中给出32位二进制字符串。 输出格式: 在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。 输入样例: 11001100100101000001010101110010 输出样例: 204.14...

cp_zhongzheng的博客 1713

套接字编程简介

IPv4套接字地址结构通常也称为"网际套接字地址结构",它以sockaddr_in 命名。定义在<netiont/in.h>头文件中。如下图 长度字段sin_len是为增加对OSI协议的支持而随4.3BSD-Reno添加的。正因为有了长度字段,才简化了长度可变套接字地址结构的处理。 以下类型都在头文件<sys/socket.h>中 sa_family_t 套接字地址结构的地...

Lynko 801

合法IP地址的判断,c语言

IP地址是一个32位的二进制数,通常被分割为4个8位二进制数。IP地址通表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。#include&lt;stdio.h&gt;#include&lt;string.h&gt;int ...

weixin_42091161的博客 2105

socket 常用操作相关函数介绍(C语言)

数据结构和字节序 基础数据结构 1基础数据结构和函数:地址 表示数据结构 struct sockaddr_in{ _SOCKADDR_COMMON(sin); in_port_t sin_port; //端口号 struct in_addr sin_addr; // IP地址 } 典型的填充IP地址的数据结构如下: struct sockaddr_in addr; addr.sin_family =AF_INET; addr.sinport = htons(80); addr.sin_addr.s

LCY133的博客 2367

C语言从一段字符串中提取IP地址的方法

1. 需求 当前待解析字符串格式为: +CIFSR:STAIP,<Station IP address> +CIFSR:STAMAC,<Station MAC address> 某次通信具体的数据内容为: +CIFSR:STAIP,"0.0.0.0" +CIFSR:STAMAC,"98:f4:ab:da:a6:7f" 要从中提取出ip地址目标字符串[0.0.0.0]。 2. 实现方法 ① 利用strstr找到固定头部; ② 利用sscanf提取具体数值; 3. 实现代码 #inc

Mculover666的博客(嵌入式) 4015

C语言实现IP地址转换

在互联网的世界里,IP地址作为网络通信的基石,扮演着至关重要的角色。IP(Internet Protocol)地址是一种逻辑地址,它是为网络中连接的设备分配的唯一地址,用于在网络上标识和定位设备。每个IP地址由一组数字组成,通常以点分隔的形式展现,例如 192.168.1.1。本章将带你初步了解IP地址的分类、版本,以及它们在现实世界中的应用场景,为你进一步深入学习IP地址在C语言中的操作打下坚实的基础。结构体是Linux和类Unix系统中定义的一个网络地址结构体,用于存储IP地址和端口号等信息。

weixin_42593549的博客 1296

linux网络编程学习

文章目录TCP协议建立连接终止连接相关APIsocketbindlistenconnect TCP协议 简略讲一下工作方式 1.建立连接需要三次握手 2.终止连接要四次握手 建立连接 第一次握手:client向server发SYN,然后进入SYN_SEND状态 (SYN = synchronous 同步的意思) 第二次握手:sever收到之后,会回一个SYN+ACK给client,然后自己进入SY...

fsczp的博客 477

深入掌握C语言实现的IP地址转换技术

IP地址是互联网中用于识别设备的数字标识,它使设备之间能够进行有效通信。每个IP地址由一系列的数字组成,通常以四个八位的二进制数表示,通过点分隔,例如:192.168.1.1。字符串是由零个或多个字符组成的序列,通常使用某种编码来表示字符,如ASCII编码或Unicode编码。而二进制则是计算机内部处理数据的基本形式,任何数据在计算机中都以二进制的形式存储和处理。在C语言中,字符串通常使用字符数组来表示,并以空字符(null terminator,即’\0’)作为结束标志。

weixin_35019679的博客 869

《UNIX网络编程》阅读笔记:套接字地址结构及基本概念

简介 套接字地址结构可以在两个方向上传递:从进程到内核和从内核到进程。 地址转换函数在地址的文本表达和它们存放在套接字地址结构中的二进制值之间进行转换。 多数现存的IPv4代码使用inet_addr和inet_ntoa函数,不过两个新函数inet_pton和inet_ntop同时适用于IPv4和IPv6两种代码。 这些地址转换函数与所转换的地址类型协议相关,要考虑是IPv4地址还是IPv6地址。这里使用一组名字以sock_开头的函数,它们以协议无关方式使用套接字地址结构。 套接字地址结构...

baidu_41388533的博客 1447

随机子空间集成方法原理与scikit-learn实践

集成学习通过组合多个基学习器的预测结果来提升模型性能,是机器学习中的核心方法之一。随机子空间方法作为集成学习的重要变体,其核心原理是通过对特征空间进行随机子采样来增加模型多样性。这种方法特别适合处理高维数据,能有效缓解维度灾难问题,常与决策树、K近邻等对特征选择敏感的基学习器配合使用。在scikit-learn中,可以通过BaggingClassifier和BaggingRegressor实现随机子空间集成,关键参数包括max_features和n_estimators。实际应用中,该方法在金融风控、医疗诊

weixin_33773084的博客 377

LinuxCNC---在PC端显示开发板LinuxCNC界面

  今天在调试开发板时,执行开发板上的linuxcnc指令,总是出现如下报错 LINUXCNC - 2.9.0~pre0 application-specific initialization failed: couldn't connect to display "192.168.137.3:1" Error in startup script: invalid command name "image" while executing "image create photo -file $f/$i

中华田园巨龙 3470

IP地址和IP子网划分

思科IP地址和IP子网划分知识点分享

2301_81439715的博客 5455

10X Genomics数据实战:手把手教你用Seurat处理单细胞PBMC数据(附完整代码)

本文详细介绍了如何使用Seurat处理10X Genomics的单细胞PBMC数据,从数据获取、质控到降维分析和细胞分群的全流程。通过实战代码演示,帮助研究者掌握单细胞RNA测序数据分析的核心技术,提升对细胞异质性的理解。

weixin_29053577的博客 253

IP地址字符串转二进制C程序实现

IP地址字符串转二进制C程序实现。

bug无边,芯片冒烟,画板经年,搞机成仙 2450

Unity新手必看:5分钟搞定TextMeshPro中文乱码,告别小方块(附7000+常用字库)

本文详细介绍了Unity中TextMeshPro中文乱码问题的解决方案,包括快速生成中文字体的步骤和优化技巧。通过使用支持中文的.ttf字体文件和自定义字符集,开发者可以在5分钟内解决TMP显示小方块的问题,提升游戏或应用的文本显示效果。

weixin_33095355的博客 362

TDS水质检测传感器原理图设计,已量产(液体传感器)

最近调试了一款针对生活用水、水培系统的 TDS 水质检测模块 —— 毕竟 TDS(总溶解固体)值直接关联水的洁净程度,是这类场景里既实用又易获取的水质指标。下面拆解下这个电路的设计逻辑,说说每个部分是怎么配合实现精准检测的。

不脱发的程序猿 1538

用 C 语言实现简单 DNS客户端查询域名的 IP 地址

本文介绍了如何使用C语言在Linux系统中实现一个简单的DNS查询客户端。主要内容包括:1) DNS请求头的构造,包含ID、标志位等关键信息;2) DNS查询构建,处理域名格式和查询类型;3) 通过UDP套接字发送请求和接收响应;4) 解析DNS响应获取IP地址;5) 客户端主函数实现。文章详细讲解了DNS协议的基本工作原理,并提供了完整的代码实现方法。通过这个示例,读者可以学习网络编程的基本技巧,理解DNS查询的底层实现机制,为开发更复杂的网络应用打下基础。

daqiaoligong的博客 763

万字长文带你由浅入深夯实ARM汇编基础——汇编指令及寻址方式最全梳理(附示例)!

见到汇编就害怕?读完这篇,扫除汇编拦路虎!!(示例丰富,可做手册,随手查阅!)

车载系统攻城狮 1万+

IP地址的分类

A类IP地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。 B类IP地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。 C类IP地址范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。 D类地址用于多点广播(Mul

Winter Is Comming 757

Multica 自托管部署与使用入门:从上线到让 AI Agent 真正干活

Multica是一个将AI Agent作为团队成员的任务协作平台,支持自托管部署。本文介绍了完整的单机部署流程: 核心架构包括前端界面、后端服务、PostgreSQL数据库和Runtime执行机器 推荐使用Docker Compose部署,需配置数据持久化目录 提供详细的docker-compose.yml和.env配置文件说明 重点注意事项:数据库密码和JWT密钥必须修改,生产环境配置必须设为production 需正确配置前端访问地址和WebSocket连接 部署完成后,用户可创建AI Agent并将其

q742971636的博客 1703

国科大人工智能原理与算法-2024-第一次作业-雷震老师

1. 反射行动(比如从热炉子上缩回你的手)是理性的吗?它们是智能的吗? 2. 以下的计算机系统在何种程度上是人工智能的实例: - 超市条码扫描器 - 网络搜索引擎 - 语音激活的电话菜单 - 对网络状态动态响应的网络路由算法 3. 为什么进化会倾向于导致行为合理的系统?设计这样的系统想达到的目标是什么?

MatsumotoChrikk 2928

C语言将整型转为IP地址或者MAC地址

在有的项目中会将IP地址用整型来表示,比如我现在这个项目,它用u_int32_t来表示一个IPv4地址,需要将其转为我们常见的x.x.x.x字符串形式。 IP 1 举个例子,比如有一个数1920103026,它表示的是一个IP地址,如何转换为直观的形式呢。 先将其转为二进制形式1110010011100100111001001110010,可以发现只有31位,而IP地址实际是有32位的,在最前面补一个0,然后分段,8位一段。 01110010 01110010 01110010 01110010,将每

RBK的博客 5721

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IP地址转换-C语言

C语言-IP地址转换函数使用介绍

weixin_36184908的博客 3523

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C语言从文件中读取IP地址

我们将中CtrInfo.txt文本文件中读取IP地址数据 文件中的IP地址数据格式 读取文件,可直接运行的代码 #include<stdio.h> #include<stdlib.h> #define ARM_MAX_NUM 10 /*最大限制10个*/ struct Ctrl_IP { unsigned int arm_ctrl_ip[4]; unsigned int send_port_ip[4]; }; struct Ctrl { unsigned in

hdsHDS6的博客 1838

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IP地址分类以及C类IP地址的子网划分

国际规定:把所有的IP地址划分为 A,B,C,D,E A类地址:范围从0-127,0是保留的并且表示所有IP地址,而127也是保留的地址,并且是用于测试环回用的。因此 A类地址的范围其实是从1-126之间。 如:10.0.0.1,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。转换为2进制来说,一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从0.0.0.1 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机(2的24次方的主机

weixin_52428496的博客 1万+

Linux下C语言获取和修改本机IP地址

/** 头文件*/#ifndef _GET_IP_H #define _GET_IP_H extern char *get_ip(char *ip); extern int set_hand_ip(const char *ip); extern int check_right_ip(const char *ip); #endif //====================

lihuibo128的专栏 7727
上一篇: Boost.log库使用方法
下一篇: 逻辑题
erlang_hell
博客等级 码龄14年 57粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值