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


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

CString strResult;

// 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();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM