Socket 编程进阶:`inet_ntop` 函数与 `sockaddr` 结构体详解
2026/9/17 6:44:25 网站建设 项目流程

Socket 编程进阶:inet_ntop函数与sockaddr结构体详解

一、inet_ntop:让 IP 地址“现原形”

当网络包到达你的程序时,IP 地址是网络字节序(大端)的二进制数据。为了让人能看懂,我们需要把它还原成点分十进制字符串(如"192.168.1.1")。

这就要用到inet_ntop函数。

  • n: Network (网络/数值)
  • to: 转换
  • p: Presentation (显示/文本)

1. 函数原型

#include<arpa/inet.h>constchar*inet_ntop(intaf,constvoid*src,char*dst,socklen_tsize);

2. 参数解析(敲黑板!)

  1. af:协议族。AF_INET(IPv4) 或AF_INET6(IPv6)。
  2. src传入参数。指向存放了大端 IP 的内存地址(通常是struct sockaddr_in里的sin_addr)。
  3. dst传出参数。你需要先准备好一个字符数组,函数会把转换好的字符串填进去。
  4. size缓冲区大小。告诉函数dst有多大,防止写越界。
    • IPv4 建议至少定义 16 字节 (INET_ADDRSTRLEN)。
    • IPv6 建议至少定义 46 字节 (INET6_ADDRSTRLEN)。

3. 返回值

  • 成功:返回指向dst的非空指针(也就是转换后的字符串地址)。
  • 失败:返回NULL(此时需检查errno)。

二、 代码实战:将二进制 IP 还原为字符串

假设我们从网络中直接捕获了 4 个字节C0 A8 01 02,我们看看如何把它变回字符串。

代码 (ntop_demo.c)
#include<stdio.h>#include<arpa/inet

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询