在ADDRINFOW
结构中,AI_FQDN
和AI_CANONNAME
字段用于指示主机的完全限定域名(Fully Qualified Domain Name,FQDN)和规范名称(Canonical Name)。
AI_FQDN
字段表示主机的完全限定域名,即主机名和域名的组合。这个字段通常用于标识主机的全局唯一性。当AI_FQDN
字段被设置时,它将包含主机的完全限定域名字符串。
AI_CANONNAME
字段表示主机的规范名称,也称为别名。这个字段通常用于标识主机的别名或规范名称。当AI_CANONNAME
字段被设置时,它将包含主机的规范名称字符串。
以下是一个使用getaddrinfo
函数来获取主机信息并访问AI_FQDN
和AI_CANONNAME
字段的示例代码:
#include
#include
#include
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("Failed to initialize winsock\n");
return 1;
}
struct addrinfoW hints;
struct addrinfoW* result;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
// Replace "example.com" with the host you want to query
int status = GetAddrInfoW(L"example.com", NULL, &hints, &result);
if (status != 0) {
printf("getaddrinfo failed: %d\n", status);
WSACleanup();
return 1;
}
// Loop through the linked list of host entries
for (struct addrinfoW* ptr = result; ptr != NULL; ptr = ptr->ai_next) {
printf("AI_FQDN: %ls\n", ptr->ai_canonname);
printf("AI_CANONNAME: %ls\n", ptr->ai_canonname);
}
FreeAddrInfoW(result);
WSACleanup();
return 0;
}
在上述示例中,GetAddrInfoW
函数使用了AI_CANONNAME
字段来获取主机的规范名称,并使用AI_FQDN
字段来获取主机的完全限定域名。注意替换example.com
为你想要查询的主机。