首页 > 解决方案 > 为什么网络程序在 IP 地址结构中存储 IP 地址

问题描述

我是 C 的初学者,我的教科书涵盖了 C 中的一些网络编程,并指出网络程序将 IP 地址存储在 IP 地址结构中

/* Internet address structure */
struct in_addr {
unsigned int s_addr; /* Network byte order (big-endian) */
};

我很困惑,我们不能只存储一个 32 位整数吗?

标签: csocketsip

解决方案


in_addr表示一个 IPv4 地址,它确实可以适合 32 位整数。

但是,还有其他类型的套接字地址不能,例如 IPv6 地址。

每种类型的套接字地址都使用自己的结构类型:

  • in_addr对于 IPv4
  • in6_addr对于 IPv6
  • char[]对于 UNIX 路径
  • ETC

通常包裹在相应的sockaddr结构中:

  • sockaddr_in对于 IPv4
  • sockaddr_in6对于 IPv6
  • sockaddr_un对于 UNIX
  • ETC

这就是您使用的套接字 API,如bind(), connect(), accept(), sendto(),recvfrom()等。

您很少需要in_addr直接使用类似的东西。通常,您会将它与需要通过in_addr结构传递 IPv4 地址的 API 结合使用。


推荐阅读