您现在的位置:软界网技术中心软件开发VC/VC.NET > 技术显示
QQ2004对IP地址显示的实现原理
2005-5-7 0:00:00   网友评论       阅读次数 点此评论
   

相信QQ2004大家玩过吧!其中对好友的IP和哪个地方的显示是不是很爽的啊。哪就跟我来让我看来看究竟。以下为实现原理。

首先载入Winsock动态库,代码如下:

int CIPAddressDlg::StartUp()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionReuqested=MAKEWORD(2,0);

err=WSAStartup(wVersionReuqested, &wsaData);

if(err!=0)

{

return err;

}

if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=0)

{

WSACleanup();

return WSAVERNOTSUPPORTED;

}

return 0;

}

以下的GetLocalHostName()函数为现实获取计算机名称,

int CIPAddressDlg::GetLocalHostName(CString&sHostName)

{

char szHostName[256];

int nRectCode;

nRectCode=gethostname(szHostName,sizeofa(szHostName));

if(nRectCode!=0)

{

sHostName=_T('Not available');

return WSAGetLastError();

}

sHostName=szHostName;

return 0;

}

然后调用GetIPAddress来获取IP地址

int CIPAddressDlg::GetIPAddress(const CString& sHostName, CString&sIPAddress)

{

struct hostent FAR *lpHostEnt=gethostbyname(sHostName);

if(lpHostEnt==NELL)

{

sIPAddress=_T('');

return WSAGetLastError();

}

LPSTR lpAddr=lpHostEnt->h_adr_list[0];

if(lpAddr)

{

struct in_addr inAddr;

memmove (&inAddr,lpAddr, 4);

sIPAddress=inet_ntoa (inAddr);

if(sIPAddress.IsEmpty())

sIPAddress=_T('Not available');

}

return 0;

}

哈哈,一切就绪了,是不是很简单啊!

本程序是VC++6.0下运行通过。

 
      来源: 作者:
 
【评论查看】