gethostbyname 函数原型:
struct hostent FAR * WSAAPI gethostbyname( _In_z_ const char FAR * name );
gethostbyname 参数为一个域名,返回一个指向hostent 的指针
hostent结构体内部包含了主机名、别名、IP地址列表等内容
struct hostent {
char FAR * h_name; /* official name of host */
char FAR * FAR * h_aliases; /* alias list */
short h_addrtype; /* host address type */
short h_length; /* length of address */
char FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr h_addr_list[0] /* address, for backward compat */
};
//#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
using namespace std;
#pragma comment(lib, "ws2_32.lib")
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
return 0;
}
hostent *host = gethostbyname("ueditor.baidu.com");
printf("host name alias 列表: \n");
int x;
for (x = 0; host->h_aliases[x]; x++) {
printf("%s\n", host->h_aliases[x]);
}
printf("IP列表: \n");
for (x = 0; ; x++)
//for (x = 0; *host->h_addr_list; x++) //2个for写法一样
{
printf("IP:[%d][%s]\n", x, inet_ntoa(*((in_addr *)host->h_addr_list[x])));
if (host->h_addr_list[x] + host->h_length >= host->h_name)
{
break;
}
}
/* host->h_addr_list[i]是地址的指针,host->h_length是地址的长度(字节数),
两者相加是地址结束的指针,host->h_name在所有地址之后,
所以如果host->h_addr_list[i] + host->h_length >= host->h_name,就表示所有地址都取完了。*/
getchar();
return 0;
}
貌似有点问题?有空再说。