Windows套接字编程中主机名的IP地址

时间:2012-02-22 18:28:23

标签: c++ c sockets winsock

我想将主机名(计算机名称My Computer - > property - > Advance System Setting - > computer Name)转换为IP地址。

有什么办法可以将主机名转换为IP地址吗? 我试过以下但是pHostInfo为NULL。 和主机名是我的电脑名称。

struct hostent* pHostInfo;
pHostInfo = gethostbyname(hostname);

在上面的代码中,它变为NULL。你能给我一些将主机名转换成IP地址的代码吗?

3 个答案:

答案 0 :(得分:3)

检查getaddrinfo功能!如果要在Windows XP SP2(或更高版本)上查找IPv6地址,则应使用GetAddrInfoW功能。这两个函数都有文档中的示例。如果您正在使用IPv4和/或MS Vista,那么您应该选择getaddrinfo,因为它与平台无关(POSIX.1-2001)。

答案 1 :(得分:2)

使用gethostname()获取本地主机名。然后,您可以将其传递给gethostbyname()

但请注意,gethostbyname()执行DNS查找甚至是本地主机,因此可能会获得实际上不属于本地计算机的IP地址,或者如果DNS配置错误,则会生成无效的IP。

如果您真正想要的是获取本地计算机的IP地址,请改用GetAdaptersInfo()GetAdaptersAddresses()

答案 2 :(得分:2)

#include <string>

#include <netdb.h>
#include <arpa/inet.h>

std::string HostToIp(const std::string& host) {
    hostent* hostname = gethostbyname(host.c_str());
    if(hostname)
        return std::string(inet_ntoa(**(in_addr**)hostname->h_addr_list));
    return {};
}
相关问题