简体   繁体   English

为什么网络程序将IP地址存储在IP地址结构中

[英]why Network programs store IP addresses in the IP address structure

I'm a beginner in C, my textbooks cover some network programming in C, and states that Network programs store IP addresses in the IP address structure 我是C语言的初学者,我的教科书涵盖了一些C语言的网络编程,并指出网络程序将IP地址存储在IP地址结构中

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

I'm confused, can't we just store a 32 bit integer? 我很困惑,我们不能只存储32位整数吗?

in_addr represents an IPv4 address, which can indeed fit in a 32bit integer. in_addr表示一个IPv4地址,它确实可以容纳32位整数。

But, there are other types of socket addresses that cannot, such as IPv6 addresses. 但是,还有其他类型的套接字地址不能使用,例如IPv6地址。

Each type of socket address uses its own struct type: 每种类型的套接字地址都使用自己的struct类型:

  • in_addr for IPv4 用于IPv4的in_addr
  • in6_addr for IPv6 用于IPv6的in6_addr
  • char[] for UNIX paths char[]用于UNIX路径
  • etc 等等

Usually wrapped inside a corresponding sockaddr struct: 通常包装在相应的sockaddr结构中:

  • sockaddr_in for IPv4 sockaddr_in用于IPv4
  • sockaddr_in6 for IPv6 sockaddr_in6用于IPv6
  • sockaddr_un for UNIX sockaddr_un用于UNIX
  • etc 等等

Which is what you use with socket APIs like bind() , connect() , accept() , sendto() , recvfrom() , etc. 这是与套接字API(如bind()connect()accept()sendto()recvfrom()recvfrom()

Very rarely would you ever need to use something like in_addr directly by itself. 您很少需要直接直接使用in_addr东西。 Typically you would use it in conjunction with an API that requires an IPv4 address to be passed via the in_addr struct. 通常,您可以将其与需要通过in_addr结构传递IPv4地址的API结合使用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM