|
QQ对IP地址显示的实现原理
2008年06月19日 星期四 下午 11:46
相信QQ2004大家玩过吧!其中对好友的IP和哪个地方的显示是不是很爽的啊。哪就跟我来让我看来看究竟。以下为实现原理。
首先载入Winsock动态库,代码如下:
intCIPAddressDlg::StartUp()
{
WORDwVersionRequested;
WSADATAwsaData;
interr;
wVersionReuqested=MAKEWORD(2,0);
err=WSAStartup(wVersionReuqested,&wsaData);
if(err!=0)
{
returnerr;
}
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=0)
{
WSACleanup();
returnWSAVERNOTSUPPORTED;
}
return0;
}
以下的GetLocalHostName()函数为现实获取计算机名称,
intCIPAddressDlg::GetLocalHostName(CString&sHostName)
{
charszHostName[256];
intnRectCode;
nRectCode=gethostname(szHostName,sizeofa(szHostName));
if(nRectCode!=0)
{
sHostName=_T("Notavailable");
returnWSAGetLastError();
}
sHostName=szHostName;
return0;
}
然后调用GetIPAddress来获取IP地址
intCIPAddressDlg::GetIPAddress(constCString&sHostName,CString&sIPAddress)
{
structhostentFAR*lpHostEnt=gethostbyname(sHostName);
if(lpHostEnt==NELL)
{
sIPAddress=_T("");
returnWSAGetLastError();
}
LPSTRlpAddr=lpHostEnt->h_adr_list[0];
if(lpAddr)
{
structin_addrinAddr;
memmove(&inAddr,lpAddr,4);
sIPAddress=inet_ntoa(inAddr);
if(sIPAddress.IsEmpty())
sIPAddress=_T("Notavailable");
}
return0;
}
哈哈,一切就绪了,是不是很简单啊!
本程序是VC 6.0下运行通过。 |
|