一个容易的获取本地ip的函数
一个简单的获取本地ip的函数
最近在与学生聊关于socket编程时,一个学生问如何获得本地IP,于是我写了一个小函数,分享给刚刚接触socket编程的朋友~
我用的是vs2005
#include <winsock2.h>
char* GetHostIP(void){
char cHost[256];
gethostname(cHost,256);
hostent *pHost = gethostbyname(cHost);
in_addr addr;
char *p = pHost->h_addr_list[0];
memcpy(&addr.S_un.S_addr,p,pHost->h_length);
return inet_ntoa(addr);
}
如果遇到找不到库的问题,可以按照下列步骤进行配置:
项目属性->连接器->输入->附加依赖项->添加ws2_32.lib->应用->确定->解决方案右键->清理解决方案->重新生成解决方案。
小小函数,希望能给初学者带来些许帮助!
------解决方案--------------------
最好加上出错处理吧, 不然程序很容易崩掉的。
------解决方案--------------------
这种情况适用于内网,如果一台电脑既有内网又有外网IP,外网IP就查不到了
最近在与学生聊关于socket编程时,一个学生问如何获得本地IP,于是我写了一个小函数,分享给刚刚接触socket编程的朋友~
我用的是vs2005
#include <winsock2.h>
char* GetHostIP(void){
char cHost[256];
gethostname(cHost,256);
hostent *pHost = gethostbyname(cHost);
in_addr addr;
char *p = pHost->h_addr_list[0];
memcpy(&addr.S_un.S_addr,p,pHost->h_length);
return inet_ntoa(addr);
}
如果遇到找不到库的问题,可以按照下列步骤进行配置:
项目属性->连接器->输入->附加依赖项->添加ws2_32.lib->应用->确定->解决方案右键->清理解决方案->重新生成解决方案。
小小函数,希望能给初学者带来些许帮助!
------解决方案--------------------
char* GetHostIP(void)
{
int ret;
char cHost[256];
ret = gethostname(cHost,256);
if (ret != 0)
{
ret = GetLastError();
return NULL;
}
hostent *pHost = gethostbyname(cHost);
in_addr addr;
char *p = pHost->h_addr_list[0];
memcpy(&addr.S_un.S_addr,p,pHost->h_length);
return inet_ntoa(addr);
}
int main(int argc, char **argv)
{
char *ip = NULL;
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
printf("%s\n", (ip = GetHostIP()) ? ip : "faild");
WSACleanup();
return 0;
}
最好加上出错处理吧, 不然程序很容易崩掉的。
------解决方案--------------------
这种情况适用于内网,如果一台电脑既有内网又有外网IP,外网IP就查不到了