#include <iostream>
#include <Winsock2.h>
using namespace std;
string GetLocalIpAddress()
{
WORD wVersionRequested = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData) != 0)
return "";
char local[255] = {0};
gethostname(local, sizeof(local));
hostent* ph = gethostbyname(local);
if (ph == NULL)
return "";
in_addr addr;
memcpy(&addr, ph->h_addr_list[0], sizeof(in_addr)); // 这里仅获取第一个ip
string localIP;
localIP.assign(inet_ntoa(addr));
WSACleanup();
return localIP;
}
void main()
{
char date[100];
strcpy (date, const_cast<char*>(GetLocalIpAddress().c_str()));
cout<<date<<endl;
system("PAUSE");
}
确保构建环境的连接器依赖项包含了WS2_32.lib,使用Winsock的程序必须连接此文件
#ifdef WIN32
#include <iostream>
#include <Winsock2.h>
#endif
void SplitString2Int( const string& src, string delimit, vector<Tint32>& vecRet)
{
string null_subst = "0";
if( src.empty() || src == "" || delimit.empty() || delimit == "" )
return;
TUint32 deli_len = delimit.size();
TUint32 nIndex = 0;
TUint32 last_search_position = 0;
while( ( nIndex = src.find( delimit, last_search_position ) ) != -1 )
{
if( nIndex == last_search_position )
{
Tint32 nValue = atoi( null_subst.c_str() );
vecRet.push_back( nValue );
}
else
{
Tint32 nValue = atoi( src.substr( last_search_position, nIndex - last_search_position ).c_str() );
vecRet.push_back( nValue );
}
last_search_position = nIndex + deli_len;
}
string last_one = src.substr( last_search_position );
if ( last_one.empty() )
{
Tint32 nValue = atoi( null_subst.c_str() );
vecRet.push_back( nValue );
}
else
{
Tint32 nValue = atoi( last_one.c_str() );
vecRet.push_back( nValue );
}
}
string GetLocalIpAddress()
{
string localIP = "";
#ifdef WIN32
WORD wVersionRequested = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData) != 0)
return "";
char local[255] = {0};
gethostname(local, sizeof(local));
hostent* ph = gethostbyname(local);
if (ph == NULL)
return "";
for(int i=0;;i++)
{
localIP = inet_ntoa(*(IN_ADDR*)ph->h_addr_list[i]);
vector<Tint32> vecRet;
SplitString2Int( localIP, ".", vecRet );
if(vecRet[0] == 192 && vecRet[1] == 168 && vecRet[2] == 0) //获得192.168.0.X最后一位
break;
if(ph->h_addr_list[i]+ph->h_length >= ph->h_name)
break;
}
//in_addr addr;
//memcpy(&addr, ph->h_addr_list[0], sizeof(in_addr)); // 这里仅获取第一个ip
//localIP.assign(inet_ntoa(addr));
WSACleanup();
#endif
return localIP;
}