c - 为什么网络程序在 IP 地址结构中存储 IP 地址
问题描述
我是 C 的初学者,我的教科书涵盖了 C 中的一些网络编程,并指出网络程序将 IP 地址存储在 IP 地址结构中
/* Internet address structure */
struct in_addr {
unsigned int s_addr; /* Network byte order (big-endian) */
};
我很困惑,我们不能只存储一个 32 位整数吗?
解决方案
in_addr
表示一个 IPv4 地址,它确实可以适合 32 位整数。
但是,还有其他类型的套接字地址不能,例如 IPv6 地址。
每种类型的套接字地址都使用自己的结构类型:
in_addr
对于 IPv4in6_addr
对于 IPv6char[]
对于 UNIX 路径- ETC
通常包裹在相应的sockaddr
结构中:
sockaddr_in
对于 IPv4sockaddr_in6
对于 IPv6sockaddr_un
对于 UNIX- ETC
这就是您使用的套接字 API,如bind()
, connect()
, accept()
, sendto()
,recvfrom()
等。
您很少需要in_addr
直接使用类似的东西。通常,您会将它与需要通过in_addr
结构传递 IPv4 地址的 API 结合使用。
推荐阅读
- django - Django Rest Framework 返回一个 JSON 文件
- php - 使用inh PHP查询Mysql数据库时,我只得到50行中的1行
- oop - 无法实例化类
- python - 是否有一种更 Pythonic 的方式来编码这种重复关系:OEIS A077947
- python - 使用 Python 3 对 Google Cloud Datastore 实体进行全文搜索?
- python-3.x - Pygame按键事件按下,不同的事件保持
- azure - Azure VM 网络带宽
- r - 如何在第二个下划线后删除部分行名
- python - 在 Python 中,在没有创建新列表的情况下,按索引从列表中删除元素的最佳方法是什么?
- dialogflow-es - DialogFlow - 如何从不同的意图给出相同的响应?