Windows套接字编程中主机名的IP地址
Posted
技术标签:
【中文标题】Windows套接字编程中主机名的IP地址【英文标题】:IP address from host name in windows socket programming 【发布时间】:2012-02-22 18:28:22 【问题描述】:我想将主机名(计算机名我的电脑 -> 属性 -> 高级系统设置 -> 计算机名)转换为 IP 地址。
有什么方法可以将主机名转换为 IP 地址? 我试过关注,但 pHostInfo 为 NULL。 hostname 是我的计算机名。
struct hostent* pHostInfo;
pHostInfo = gethostbyname(hostname);
在上面的代码中,它是 NULL。你能给我把主机名转换成IP地址的代码吗?
【问题讨论】:
WSAGetLastError()
告诉你什么?
【参考方案1】:
#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 ;
【讨论】:
【参考方案2】:检查getaddrinfo
功能!如果您在 Windows XP SP2(或更高版本)上寻找 IPv6 地址,您应该使用 GetAddrInfoW
函数。这两个函数在文档中都有示例。如果您正在使用 IPv4 和/或 MS Vista 及更好的版本,您应该选择 getaddrinfo
,因为它独立于平台 (POSIX.1-2001)。
【讨论】:
【参考方案3】:使用gethostname()
获取本地主机名。然后您可以将其传递给gethostbyname()
。
但是请注意,gethostbyname()
甚至会针对本地主机名执行 DNS 查找,因此可能会获得实际上不属于本地计算机的 IP 地址,或者如果 DNS 配置错误,则可能会获得无效的 IP。
如果您真正想做的只是获取本地计算机的 IP 地址,请改用 GetAdaptersInfo()
或 GetAdaptersAddresses()
。
【讨论】:
以上是关于Windows套接字编程中主机名的IP地址的主要内容,如果未能解决你的问题,请参考以下文章