【Linux网络编程基础--socket地址API】

一、主机字节序和网络字节序

  • 主机字节序(Host Byte Order):你当前电脑的内存字节顺序(比如 x86 是小端)

  • 网络字节序(Network Byte Order):统一规定为大端序(高位字节在高位地址,比较符合人类阅读习惯。)

测试电脑是什么字节序

void char_testByte()
{unsigned int i=0x1200;char *ptr=(char*)&i;if(*ptr)printf("Big\n");else printf("Little\n");}

对于两台使用不同字节序的主机,他们俩之间传输数据时,必然会错误的解释。因此规定大端字节序为网络字节序,以作为共同的一个标准。

Linux提供了如下4个函数来完成主机字节序和网络字节序之间的转换:

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);		
//host to network long:把32bit的主机序转换到网络序
uint16_t htons(uint16_t hostshort);		
//把16bit的主机序转换到网络序
uint32_t ntohl(uint32_t netlong);		
//network to host long:把32bit的网络序转换到主机序
uint16_t ntohs(uint16_t netshort);	
//把16bit的网络序转换到主机序

二、socket地址

  1. UNIX本地域协议族使用下面这个专用socket地址结构体
struct sockaddr_un {sa_family_t sun_family;    // AF_UNIXchar sun_path[108]; // 套接字路径(如 "/tmp/my_socket")
};
  1. TCP/IP协议族的专用socket地址结构体如下
  • IPv4
#include <netinet/in.h>  // 头文件struct sockaddr_in {sa_family_t    sin_family;   // 地址族(AF_INET)in_port_t      sin_port;     // 16位端口号(需用 htons() 转换字节序)struct in_addr sin_addr;     // 32位 IPv4 地址char           sin_zero[8];  // 填充字段(未使用,通常置 0)
};struct in_addr {in_addr_t      s_addr;       // 32位 IPv4 地址(需用 htonl() 转换字节序)
};
  • IPv6
#include <netinet/in.h>struct sockaddr_in6 {sa_family_t     sin6_family;   // 地址族(AF_INET6)in_port_t       sin6_port;     // 16位端口号(需用 htons() 转换)uint32_t        sin6_flowinfo; // 流标签(通常为 0)struct in6_addr sin6_addr;     // 128位 IPv6 地址uint32_t        sin6_scope_id; // 接口作用域 ID(用于链路本地地址)
};struct in6_addr {unsigned char   s6_addr[16];   // 128位 IPv6 地址
};
  1. IP地址转换函数
    1. 1 所需头文件
#include<arpa/inet.h>
    1. 2 inet_pton函数:把点分十进制字符串表示的IP地址转成网络字节序表示的IP地址,结果存放在dst所指向的内存。
int inet_pton(int af,const char * src,void* dst);

官方文档
在这里插入图片描述
代码测试

void test_inet_pton()
{const char *ip_str = "192.168.0.1";struct in_addr addr;int ret = inet_pton(AF_INET, ip_str, &addr);if (ret == 1) {printf("[inet_pton] 成功将字符串 \"%s\" 转换为二进制地址\n", ip_str);printf("[inet_pton] 网络字节序(十六进制): 0x%x\n", ntohl(addr.s_addr));//先把二进制表示的转换成十六进制形式,也就是网络字节序。(不能直接输出二进制)} else if (ret == 0) {printf("[inet_pton] 输入地址无效: %s\n", ip_str);} else {perror("[inet_pton] 转换出错");}
}
    1. 3 inet_ntop函数:把网络字节序表示的IP地址转化成点分十进制表示的IP地址
const char* inet_ntop(int af,const void* src,char* dst,socklen_t cnt);

在这里插入图片描述
代码测试

void test_inet_ntop()
{struct in_addr addr;addr.s_addr = htonl(0xC0A80001);  // 十进制 192.168.0.1 的网络字节序char ip_str[INET_ADDRSTRLEN];const char *result = inet_ntop(AF_INET, &addr, ip_str, sizeof(ip_str));if (result != NULL) {printf("[inet_ntop] 成功将二进制地址转换为字符串: %s\n", ip_str);} else {perror("[inet_ntop] 转换出错");}
}

运行结果
在这里插入图片描述

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

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

相关文章

Linux路径MTU发现(Path MTU Discovery, PMTU)

Linux路径MTU发现&#xff08;Path MTU Discovery, PMTU&#xff09;机制是TCP/IP协议栈中确保数据包高效传输的核心技术。其核心目标是动态探测源主机到目的主机路径上的最小MTU&#xff08;Maximum Transmission Unit&#xff09;&#xff0c;从而避免IP分片&#xff0c;提升…

【MySQL进阶】------MySQL程序

MySQL程序简介 MySQL安装完成通常会包含如下程序&#xff1a; Linux系统程序⼀般在 /usr/bin⽬录下&#xff0c;可以通过命令查看&#xff1a; windows系统⽬录&#xff1a;你的安装路径\MySQL Server 8.0\bin&#xff0c;可以通过命令查看&#xff1a; 每个 MySQL 程序都有许…

Linux大页内存导致服务内存不足

Linux大页内存导致服务内存不足的解决方法 大页内存&#xff08;Huge Pages&#xff09;是Linux内核提供的一种机制&#xff0c;用于减少TLB&#xff08;转换后备缓冲区&#xff09;的压力&#xff0c;提高内存访问性能。然而&#xff0c;如果配置不当&#xff0c;大页内存可能…

超宽带测距+测角+无线通信一体化模组:智能门锁、智能遥控器、AR头戴、智能穿戴

超宽带测距测角无线通信一体化模组&#xff1a;智能门锁、智能遥控器、AR头戴、智能穿戴UWB测距测角技术&#xff0c;因其高精度、低延迟、抗干扰能力&#xff0c;正广泛应用于“人-物-设备”的空间感知场景&#xff0c;成为构建智能空间和精准互动的重要底层技术。代表厂商与产…

基于单片机空气质量检测/气体检测系统

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 随着环境污染问题日益严重&#xff0c;空气质量监测成为社会关注的焦点。基于单片机的空气质量检…

网络安全 | 从 0 到 1 了解 WAF:Web 应用防火墙到底是什么?

&#x1f914; 写在前面 2020年 我参加公司的安全技能大赛&#xff0c;队友在实操环节启用了 WAF 防火墙&#xff0c;这是我第一次接触到 Web 应用防火墙。作为一个 Web 开发老鸟&#xff0c;真是羞愧呀&#x1f602;。 &#x1f510; Web应用防火墙 WAF 全称是 Web Applica…

服务器突然之间特别卡,什么原因?

原因总结&#xff1a;1.一般是本地网速的问题&#xff0c;服务器网速的问题&#xff0c;服务器CPU被占满的问题今天发现另一个会导致特别卡的问题&#xff0c;是主存占满也会导致卡顿。解释如下&#xff1a;当服务器的主存&#xff08;物理内存&#xff09;被完全占满时&#x…

AI应用标准详解:A2A MCP AG-UI

"OpenAI接入MCP&#xff0c;Google推出A2A&#xff0c;微软与OpenAI紧密绑定"标志着云计算竞争焦点已从"算力"和"模型参数"转向‌Agent标准协议控制权‌。在AI快速演进的今天&#xff0c;我们不再仅关注单个AI的智能水平&#xff0c;而是探索多个…

Web安全学习步骤

以下是Web安全专项学习步骤&#xff0c;聚焦实战能力培养&#xff0c;分为4个阶段资源清单**&#xff0c;适合从入门到进阶。重点培养漏洞挖掘能力与防御方案设计双重视角&#xff1a;---阶段1&#xff1a;Web技术筑基&#xff08;1-2个月&#xff09; | 领域 | 关键…

Android工程命令行打包并自动生成签名Apk

1.进入工程目录查看所有gradle任务 2.打包debug与release 打包前先生成jks签名文件test.jks 在工程的build.gradle中添加签名配置 signingConfigs {release {storeFile file("/home/dev/test.jks")storePassword "111111"keyAlias "key0"keyPas…

分布式微服务--Nacos作为配置中心(一)

1.Nacos配置远程配置中心注意总结&#xff1a;本地配置文件必须使用 bootstrap.yml 或 bootstrap.properties远程配置的加载优先于 application.yml&#xff0c;因此必须写在 bootstrap 配置文件中。本地配置文件中 file-extension 的取值仅支持两种&#xff1a;properties 或 …

Linux安装MySQL及链接第三方工具详细教程,带图带错误分析

本教程所有代码均为root用户权限下操作&#xff0c;如果不是root用户&#xff0c;在代码前加上&#xff08;sudo &#xff09;即可 一、安装MySQL服务 准备工作&#xff1a; 有时&#xff0c;系统无法解析 部分域名&#xff0c;导致无法获取镜像列表&#xff0c;从而无法安装…

WPS2024 软件下载及安装教程!

软件介绍 WPS Office是一套办公软件套装&#xff0c;包含WPS文字、WPS表格、WPS演示三大功能模块&#xff0c;可以满足常用文字处理、表格编辑和演示制作等多种办公需求&#xff0c;以其强大的功能和用户友好的界面赢得了众多用户的青睐。 软件&#xff1a;‌‌‌‌‌‌WPS Of…

ESD监控系统确保工厂生产设备的静电安全

随着电子工业的飞速发展&#xff0c;电子产品的精密程度不断提高&#xff0c;对生产环境的要求也日益严格。在许多电子制造工厂中&#xff0c;安装和维护有效的静电防护措施已成为保障生产安全和产品品质的关键。ESD监控系统作为静电管理的核心工具&#xff0c;为确保工厂设备和…

基于react的YAPI实战指南

基于react的YAPI 示例新增项目扩展遇到的问题&#xff0c;更改页面内容没有生效可能遇到的问题新增项目扩展 支持设置项目权限【公开】 <RadioGroup><Radio value"private" className"radio"><Icon type"lock" />私有<br …

docker镜像源配置教程,以及解决安装好docker配置镜像源后,出现报错。Job for docker.service failed

Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details.解决后效果&#xff1a;1、进入/etc/docker目录cd /etc/docker2、创建daemon.json文件并…

安卓264和265编码器回调编码数据写入文件的方法

一、写入文件 1、变量定义 private FileOutputStream m265FileOutputStream null; private File m265File null; private static final String HEVC_265_FILE_NAME "output.265"; // 或 .265 private static final String AVC_264_FILE_NAME "output.264&qu…

【基础完全搜索】USACO Bronze 2019 January - 猜动物Guess the Animal

题目描述 当奶牛贝茜和她的朋友艾尔西玩腻了常见的贝壳游戏后&#xff0c;她们喜欢玩另一个经典游戏"猜动物"。 游戏开始时&#xff0c;贝茜会在心中选定一种动物&#xff08;大多数时候她都会选奶牛&#xff0c;这让游戏变得相当无聊&#xff0c;不过偶尔贝茜也会…

Spring IoC容器与Bean管理

代码结构spring01/ ├── pom.xml ├── spring01.iml └── src/├── main/│ ├── java/│ │ └── com/│ │ └── demo/│ │ ├── bean/│ │ │ ├── Demo.java│ │ │ ├── Emp1.java│ │ …

【QT】概述

个人主页&#xff1a;Guiat 归属专栏&#xff1a;QT 文章目录1. Qt基础入门1.1 什么是Qt1.2 Qt的历史与发展1.3 Qt的核心特性2. Qt架构深度解析3. Qt开发环境搭建4. Qt应用开发实战4.1 项目结构4.2 设计用户界面4.3 实现功能逻辑4.4 数据持久化4.5 美化界面4.6 添加动画效果5. …