我想將主機名(計算機名我的電腦 - >屬性 - >高級系統設置 - >計算機名)轉換爲IP地址。從主機名在Windows套接字編程中的IP地址
有什麼辦法可以將主機名轉換爲IP地址? 我試過以下,但pHostInfo來作爲NULL。 和主機名是我的電腦名稱。
struct hostent* pHostInfo;
pHostInfo = gethostbyname(hostname);
在上面的代碼中它來到NULL。你可以請給我代碼,將主機名轉換爲IP地址?
我想將主機名(計算機名我的電腦 - >屬性 - >高級系統設置 - >計算機名)轉換爲IP地址。從主機名在Windows套接字編程中的IP地址
有什麼辦法可以將主機名轉換爲IP地址? 我試過以下,但pHostInfo來作爲NULL。 和主機名是我的電腦名稱。
struct hostent* pHostInfo;
pHostInfo = gethostbyname(hostname);
在上面的代碼中它來到NULL。你可以請給我代碼,將主機名轉換爲IP地址?
使用gethostname()
獲取本地主機名。然後您可以將其傳遞給gethostbyname()
。
但是,請注意,gethostbyname()
對本地主機執行DNS查找,因此可能獲得實際上不屬於本地計算機的IP地址,或者如果DNS配置錯誤,則可能獲得無效IP。
如果您真正想要的是獲取本地計算機的IP地址,請改爲使用GetAdaptersInfo()
或GetAdaptersAddresses()
。
檢查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 {};
}
'WSAGetLastError()'告訴你什麼? – 2012-02-22 18:41:03