繁体   English   中英

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

[英]IP address from host name in windows socket programming

我想将主机名(计算机名“我的电脑”->“属性”->“高级系统设置”->“计算机名”)转换为IP地址。

有什么办法可以将主机名转换为IP地址? 我尝试了以下操作,但pHostInfo作为NULL传入。 主机名是我的计算机名。

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

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

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

#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 {};
}

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

但是请注意,即使对于本地主机名, gethostbyname()也会执行DNS查找,因此可以获取实际上不属于本地计算机的IP地址,或者如果DNS配置错误,则可以获得无效的IP。

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

暂无
暂无

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

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