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地址的主要内容,如果未能解决你的问题,请参考以下文章

sockt套接字编程

Python基础篇第十四篇:网络编程

网络编程--Socket(套接字)

如何管理代理服务器的长短连接

Socket 编程

网络编程套接字