widows平台获取本地IP地址

以下方法只限用在windows平台下
//获取本地ip

int getLocalIp(string& destIp, string& pIpAddr)
{
	sockaddr_in dest;
	dest.sin_family = AF_INET;
	dest.sin_addr.s_addr = inet_addr(destIp.c_str());

	DWORD bestIfIndex = 0;
	if ( NO_ERROR != GetBestInterface(dest.sin_addr.s_addr,&bestIfIndex) )
	{
		return -1;
	}

	PMIB_IPADDRTABLE pIpAddrTable = (MIB_IPADDRTABLE *) HeapAlloc(GetProcessHeap(), 0, sizeof (MIB_IPADDRTABLE));

	ULONG addrSize = 0;
	if (ERROR_INSUFFICIENT_BUFFER == GetIpAddrTable(pIpAddrTable,&addrSize,FALSE))
	{
		HeapFree(GetProcessHeap(), 0, pIpAddrTable);
		pIpAddrTable = (PMIB_IPADDRTABLE) HeapAlloc(GetProcessHeap(), 0, addrSize);
	}
	else
	{
		return -1;
	}

	sockaddr_in sourceIP;
	memset(&sourceIP,0,sizeof(sockaddr_in));
	if (NO_ERROR == GetIpAddrTable(pIpAddrTable,&addrSize,FALSE))
	{
		for(DWORD i = 0;i < pIpAddrTable->dwNumEntries; ++i )
		{
			DWORD dwAddr = pIpAddrTable->table[i].dwAddr;
			if ( pIpAddrTable->table[i].dwIndex == bestIfIndex ) 
			{
				sourceIP.sin_addr.s_addr = dwAddr;
				sourceIP.sin_family = AF_INET;
				break;
			}
		}
	}

	if (pIpAddrTable != NULL)
	{
		HeapFree(GetProcessHeap(), 0, pIpAddrTable);
		pIpAddrTable = NULL;
	}
	pIpAddr = inet_ntoa(sourceIP.sin_addr);

	return 0;
}


需要用到头文件有

#include <iphlpapi.h >

还需要在工程属性中添加  iphlpapi.lib

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值