You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

这段C语言IP处理代码输出异常,求排查问题原因

IP地址转换输出异常问题排查

问题根源

代码调用inet_ntop时传入的第二个参数错误:你传递了整个struct sockaddr_in结构体的指针&servaddr,但该函数处理AF_INET类型时,需要的是struct in_addr类型的指针(即servaddr.sin_addr的地址)。

错误解析

struct sockaddr_in的内存布局中,前两个字段是sin_family(值为AF_INET即2)和sin_port(值为htons(22000)即0x55f0)。当把整个结构体指针传给inet_ntop时,函数会从起始位置读取4字节当作IP地址数据:

  • 第一个字节是sin_family的低字节:0x02 → 十进制2
  • 第二个字节是sin_family的高字节:0x00 → 十进制0
  • 第三个字节是sin_port的低字节:0x55 → 十进制85
  • 第四个字节是sin_port的高字节:0xf0 → 十进制240
    这四个字节组合起来就是错误输出的2.0.85.240。

修正后的代码

int main(int argc, char **argv) {
        struct sockaddr_in servaddr;
        char buf[INET_ADDRSTRLEN];

        memset(&servaddr, 0, sizeof(servaddr));
        servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
        servaddr.sin_port = htons(22000);
        servaddr.sin_family = AF_INET;
        fprintf(stderr, "addrinfo: %s\n",
                   inet_ntop(AF_INET, &servaddr.sin_addr, buf, INET_ADDRSTRLEN));
   }

内容的提问来源于stack exchange,提问作者Richard Melville

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:24:50