看到一些例程,使用的是winsocket,实际上我们都知道ipconfig就能完成我们的要求。IP助手API提供了类似的功能,本文用到的是GetAdaptersInfo,具体参数意义可以查MSDN。
例子如下:
//需要链接iphlpapi.lib
#include <iostream>
#include <atlstr.h>
#include <iphlpapi.h>
void GetHostIP(CString& address)
{
ULONG len = 0; address.Empty();
GetAdaptersInfo(NULL, &len);
PIP_ADAPTER_INFO p = static_cast<PIP_ADAPTER_INFO>(malloc(len));
GetAdaptersInfo(p, &len);
for (PIP_ADAPTER_INFO q = p; q != NULL; q = q->Next)
{
address += q->IpAddressList.IpAddress.String;
address += '/n';
}
free(p);
}
int _tmain(int argc, _TCHAR* argv[])
{
CString address;
GetHostIP(address);
std::cout << address;
return 0;
}
第一次调用,len返回需要的缓冲区长度;第二次调用得到信息。因为可能不止一块网卡,每个IP地址用换行符分隔。