windows下用C++獲取本機IP地址

BSTR CamUtilsCtrl::GET_TERM_IP(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());網絡

CString strResult;socket

// TODO: 在此添加調度處理程序代碼
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2,2);
//初始化socket環境
if(::WSAStartup(sockVersion,&wsaData)!=0)
{
tracelog3(LOG_INFO,"WSAStartup failed.ErrorCode=%d",GetLastError());
exit(0);
}指針

//得到主機名稱
char szHost[256]={0};
::gethostname(szHost,256);
tracelog3(LOG_INFO,"主機名=%s",szHost);
//得到主機名稱下的網絡信息
hostent *pHost = ::gethostbyname(szHost); //返回指定主機名的包含主機名字和地址信息的hostent結構的指針
/*struct hostent
{
char *h_name; //正式主機名
char ** h_aliases; //主機別名
short h_addrtype; //主機IP地址類型:IPV4-AF_INET
short h_length; //主機I票地址字節長度,IPV4是4字節,即32位
char ** h_addr_list; //主機的IP地址列表
};*/字符串

//處理得到的網絡信息
in_addr addr;
CString strTmp,strBuf;
for(int i=0;;i++)
{
char *p = pHost->h_addr_list[i];
if(p==NULL)
break;
memcpy(&addr.S_un.S_addr,p,pHost->h_length);
char *slzp = ::inet_ntoa(addr); //將sin_addr儲存的IP(數值)轉換成字符串形式(127.0.0.1)
strBuf = slzp;
strTmp.Append((strBuf+"|"));
}
//關閉socket環境
::WSACleanup();
strTmp.TrimRight("|");
//EVTFSNMESSAGE(strTmp);
strResult = strTmp;

return strResult.AllocSysString();
}get

相關文章
相關標籤/搜索