| 文章标题:QQ2004对IP地址显示的实现原理 原 作 者:后街男孩-红2 M0 o' d% k1 G 原 出 处:vczx.com, m' O: B: ^" [* c0 J. E& z 发 布 者:后街男孩-红 发布类型:原创& ?2 e4 B9 @. P% ^' n9 y 发布日期:2004-11-11 今日浏览:22: \0 K: ^' Z/ h% A 总 浏 览:7764 W& p( y: g/ K: z5 X1 n! ]+ b& l |
|
相信QQ2004大家玩过吧!其中对好友的IP和哪个地方的显示是不是很爽的啊。哪就跟我来让我看来看究竟。以下为实现原理。 首先载入Winsock动态库,代码如下: int CIPAddressDlg::StartUp() { , c4 s: G; J: LWORD wVersionRequested; 3 h/ s4 y9 ~6 N& Q. }5 ?2 F; xWSADATA wsaData; 4 @3 g& _8 Y; J$ yint err; wVersionReuqested=MAKEWORD(2,0); - ^8 a# _3 K7 V. u8 ~; G+ qerr=WSAStartup(wVersionReuqested, &wsaData); if(err!=0) { ; c- f' g, R( i3 l/ s! Mreturn err; } ' K, a+ b' L6 B' [if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=0) { WSACleanup(); return WSAVERNOTSUPPORTED; } $ d- K: b; j5 w& Sreturn 0; } 以下的GetLocalHostName()函数为现实获取计算机名称, $ m5 l5 Z- a: s" mint CIPAddressDlg::GetLocalHostName(CString&sHostName) & w3 ~$ |3 |$ ~7 w{ char szHostName[256]; int nRectCode; ! B+ s# V' i$ R. F9 dnRectCode=gethostname(szHostName,sizeofa(szHostName)); ) i J& B* W, h9 d( ^1 Kif(nRectCode!=0) 7 P, A7 r( v% e+ x/ G. @8 O4 q{ sHostName=_T("Not available"); ) h8 _$ ]* S5 M$ qreturn WSAGetLastError(); ! T2 @. d5 [4 j+ O8 @, E2 P( C} ) ]- @2 W+ t9 H1 tsHostName=szHostName; $ X4 C& h* w0 f7 g1 Sreturn 0; & z5 n. Q( \4 \} 然后调用GetIPAddress来获取IP地址 int CIPAddressDlg::GetIPAddress(const CString& sHostName, CString&sIPAddress) 6 a+ E% Y: Z4 u{ struct hostent FAR *lpHostEnt=gethostbyname(sHostName); 2 r, N; j* q8 ^5 B f( R; G: E. kif(lpHostEnt==NELL) { ' E1 _7 q0 \* ^6 csIPAddress=_T(""); * n/ }" c) M% ` T8 Sreturn WSAGetLastError(); $ J7 x$ @7 `3 k, `, C2 d& j. p% c} LPSTR lpAddr=lpHostEnt->h_adr_list[0]; 4 n. j9 G7 X2 @" _0 Yif(lpAddr) " `/ k: S' J& y5 |{ struct in_addr inAddr; / A% A: E* g; [* }$ e& t0 zmemmove (&inAddr,lpAddr, 4); % f# M9 R' |0 ssIPAddress=inet_ntoa (inAddr); if(sIPAddress.IsEmpty()) sIPAddress=_T("Not available"); } return 0; } 哈哈,一切就绪了,是不是很简单啊! + R2 i1 V. |8 \; J本程序是VC++6.0下运行通过。 |
先顶一把,我还没涉及网络开发.
不错
好东西
见过,似乎是转贴把
不管是不是转帖,希望好东西大家分享。
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |