Dev-C++ version
#include
<
iostream
>
#include
<
winsock2.h
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
using
namespace
std;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
bool
GetLocalIP(
char
*
ipBuff);
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
main()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
WORD wVersionRequested = MAKEWORD(2,2);
WSADATA data;
int err;
err = WSAStartup(wVersionRequested, &data);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if ( err != 0 ) ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//* Tell the user that we could not find a usable */
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//* WinSock DLL. */
cout << "We could not find a usable winsock DLL!" << endl;
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
char IP[16] = ...{ 0 };
if( GetLocalIP( IP ) )
cout << IP << endl;
else
cout << "Failed to GetLocalIP() !" << endl;
WSACleanup();
system("PAUSE");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
bool
GetLocalIP(
char
*
ipBuff)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
if ( ipBuff == NULL )
return false;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
char hostName[80] = ...{ 0 };
if ( gethostname( hostName , 80 ) == SOCKET_ERROR )
return false;
struct hostent * phe = gethostbyname( hostName );
if ( phe == NULL )
return false;
if ( phe->h_addr_list[0] == 0 )
return false;
struct in_addr addr;
memcpy( &addr, phe->h_addr_list[0] , sizeof( struct in_addr ) );
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
char * tempIP = inet_ntoa( addr );
memcpy(ipBuff, tempIP , strlen(tempIP) );
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
return true;
}
VC++ version
#include
<
iostream.h
>
#include
<
winsock2.h
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
bool
GetLocalIP(
char
*
ipBuff);
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
main()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
WORD wVersionRequested = MAKEWORD(2,2);
WSADATA data;
int err;
err = WSAStartup(wVersionRequested, &data);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if ( err != 0 ) ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//* Tell the user that we could not find a usable */
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//* WinSock DLL. */
cout << "We could not find a usable winsock DLL!" << endl;
return;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
char IP[16] = ...{ 0 };
if( GetLocalIP( IP ) )
cout << IP << endl;
else
cout << "Failed to GetLocalIP() !" << endl;
WSACleanup();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
system("PAUSE");
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
bool
GetLocalIP(
char
*
ipBuff)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
if ( ipBuff == NULL )
return false;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
char hostName[80] = ...{ 0 };
if ( gethostname( hostName , 80 ) == SOCKET_ERROR )
return false;
struct hostent * phe = gethostbyname( hostName );
if ( phe == NULL )
return false;
if ( phe->h_addr_list[0] == 0 )
return false;
struct in_addr addr;
memcpy( &addr, phe->h_addr_list[0] , sizeof( struct in_addr ) );
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
char * tempIP = inet_ntoa( addr );
memcpy(ipBuff, tempIP , strlen(tempIP) );
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
return true;
}
下面是GetLocalIP的重载函数,在设置控件的时候可以用到:
bool
GetLocalIP(BYTE
&
nField0 , BYTE
&
nField1 , BYTE
&
nField2 , BYTE
&
nField3)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
nField0 = nField1 = nField2 = nField3 = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
char hostName[80] = ...{ 0 };
if ( gethostname( hostName , 80 ) == SOCKET_ERROR )
return false;
struct hostent * phe = gethostbyname( hostName );
if ( phe == NULL )
return false;
if ( phe->h_addr_list[0] == 0 )
return false;
struct in_addr addr;
memcpy( &addr, phe->h_addr_list[0] , sizeof( struct in_addr ) );
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
char * tempIP = inet_ntoa( addr );
UINT size = strlen( tempIP );
UINT pos = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
while ( tempIP[pos] != '.' )...{
nField0 = nField0*10 + (tempIP[pos++] - 0x30);
}
pos++;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
while ( tempIP[pos] != '.' )...{
nField1 = nField1*10 + (tempIP[pos++] - 0x30);
}
pos++;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
while ( tempIP[pos] != '.' )...{
nField2 = nField2*10 + (tempIP[pos++] - 0x30);
}
pos++;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
while ( tempIP[pos] != '/0' )...{
nField3 = nField3*10 + (tempIP[pos++] - 0x30);
}
return true;
}