获取本机IP的函数


新建win32控制台程序,代码如下:

#include <winsock2.h> 

#include <stdio.h>

void GetLocalIP();

int main()

{    

    GetLocalIP();

    return 0;

}

void GetLocalIP()

{

char chostname[256] = { 0 };

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 2, 2 );


err = WSAStartup( wVersionRequested, &wsaData );

if (err != 0)

{

return;

}

if ( gethostname( chostname , 256 ) == SOCKET_ERROR )

{

return;

}

struct hostent * phe = gethostbyname( chostname );

if ( phe == NULL )

{

return;

}

if ( phe->h_addr_list[0] == 0 )

{

return;

}

struct in_addr addr;

memcpy( &addr, phe->h_addr_list[0] , sizeof( struct in_addr ) );

DWORD  dw1=inet_addr(inet_ntoa(addr));

WORD  wd1=LOWORD(dw1);//取高十六位

WORD  wd2=HIWORD(dw1);//取低十六位

BYTE  bte1=LOBYTE(wd1);

BYTE  bte2=HIBYTE(wd1);

BYTE  bte3=LOBYTE(wd2);

BYTE  bte4=HIBYTE(wd2);

printf("%d.%d.%d.%d",bte1,bte2,bte3,bte4);

}

正常情况可以直接编译运行,如果遇到LNK2001,无法解析的外部符号..错误,在工程属性[链接器]->[命令行]附加选项中增加Ws2_32.lib,然后重新编译。

你可能感兴趣的:(获取本机ip地址)