首页 > 编程资源分享区 > C/C++源代码共享 > QQ2004对IP地址显示的实现原理
2006
05-26

QQ2004对IP地址显示的实现原理

相信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(sz HostName,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下运行通过。


留下一个回复