您的位置:首页 > 其它

获得本地IP地址

2016-05-05 15:55 435 查看
#include <winsock2.h>
#pragma comment(lib,"wsock32.lib")
typedef struct tagIPInfo
{
char ip[30];
}IPInfo;

bool GetLocalIPs(IPInfo* ips, int maxCnt, int* cnt)
{
//1.初始化wsa
WSADATA wsaData;
int ret = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (ret != 0)
{
return false;
}
//2.获取主机名
char hostname[256];
ret = gethostname(hostname, sizeof(hostname));
if (ret == SOCKET_ERROR)
{
return false;
}
//3.获取主机ip
HOSTENT* host = gethostbyname(hostname);
if (host == NULL)
{
return false;
}
//4.逐个转化为char*并拷贝返回
*cnt = host->h_length < maxCnt ? host->h_length : maxCnt;
for (int i = 0; i < *cnt; i++)
{
in_addr* addr = (in_addr*)*host->h_addr_list;
strcpy(ips[i].ip, inet_ntoa(addr[i]));
}
return true;
}

bool GetLocalIP(char* ip)
{
//1.初始化wsa
WSADATA wsaData;
int ret = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (ret != 0)
{
return false;
}
//2.获取主机名
char hostname[256];
ret = gethostname(hostname, sizeof(hostname));
if (ret == SOCKET_ERROR)
{
return false;
}
//3.获取主机ip
HOSTENT* host = gethostbyname(hostname);
if (host == NULL)
{
return false;
}
//4.转化为char*并拷贝返回
strcpy(ip, inet_ntoa(*(in_addr*)*host->h_addr_list));
return true;
}

int main()
{

char szIP[16] = { 0 };
GetLocalIP(szIP);

IPInfo ipInfo[20];

int ipCount = 0;
memset(ipInfo, 0, sizeof(ipInfo));
GetLocalIPs(a, 10, &ipCount);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: