1、通过域名获取 IP 地址
一般客户端程序不能要求用户输入 IP 地址和 port,但是服务端程序的 IP 地址有可能变化。但是一般情况域名一旦注册可能永久不变,因此可以利用域名编写程序会更好。每次运行程序时根据域名获取 IP 地址,再接入服务器,这样程序就不会依赖于服务器 IP 地址了。
利用域名获取 IP 地址可以使用以下函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Linux
#include <netdb.h>
// 失败返回 NULL
struct hostent * gethostbyname(const char * hostname);
struct hostent {
char * h_name; // official name
char ** h_aliases; // alias list
int h_addrtype; // host address type
int h_length; // address length
char ** h_addr_list; // address list
}
// Windows
#include <winsock2.h>
struct hostent * gethostbyname(const char * name);
h_addr_list
最终指向 in_addr
结构体。
2、通过 IP 地址获取域名
1
2
3
4
5
6
7
8
9
// Linux
#include <netdb.h>
struct hostent * gethostbyaddr(const char * addr, socklen_t len, int family);
// Windows
#include <winsock2.h>
struct hostent * gethostbyaddr(const char * addr, int len, int type);
addr
传入 in_addr
结构体指针。len
在 IPv4 时为 4,IPv6 时为 16。family
传入地址族信息。