2012-02-22 109 views
1

我想將主機名(計算機名我的電腦 - >屬性 - >高級系統設置 - >計算機名)轉換爲IP地址。從主機名在Windows套接字編程中的IP地址

有什麼辦法可以將主機名轉換爲IP地址? 我試過以下,但pHostInfo來作爲NULL。 和主機名是我的電腦名稱。

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

在上面的代碼中它來到NULL。你可以請給我代碼,將主機名轉換爲IP地址?

+0

'WSAGetLastError()'告訴你什麼? – 2012-02-22 18:41:03

回答

0

使用gethostname()獲取本地主機名。然後您可以將其傳遞給gethostbyname()

但是,請注意,gethostbyname()對本地主機執行DNS查找,因此可能獲得實際上不屬於本地計算機的IP地址,或者如果DNS配置錯誤,則可能獲得無效IP。

如果您真正想要的是獲取本地計算機的IP地址,請改爲使用GetAdaptersInfo()GetAdaptersAddresses()

2

檢查getaddrinfo功能!如果您在Windows XP SP2(或更高版本)上查找IPv6地址,則應使用GetAddrInfoW函數。這兩個函數在文檔中都有示例。如果您使用的是IPv4和/或MS Vista以及更好的版本,則應該選擇getaddrinfo,因爲它與平臺無關(POSIX.1-2001)。

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