实现原理
我们访问“http://www.baidu.com/s?wd=202.102.123.22&cl=3”这个网址就会返回IP对应的物理地址,因而我们的实现思路就是动态提交IP地址到这个网址,再取回结果。当然,这个工作可不能手工完成,因为这样太笨了
技术重点
虽然我们可以使用HTTP协议来实现,但这样会有点麻烦,所以本文使用了微软提供的 CInternetSession和CHttpFile类来实现,通过CInternetSession的构造函数构建一个连接会话,然后通过 CInternetSession类的OpenURL方法来取得CHttpFile的对像,最后通过ReadString读取返回信息并提取出需要的信息即可。
具体实现
首先新建一个对话框程序,并使用“#include”头文件;然后加入如图1所示的相应控件,之后再为解析按钮加入如下的代码即可。
void ::OnOK()
{
CString m_ReturnStr="";//要返回的物理地址
CString m_ip=""; //需要解析的IP地址
CString straddress("http://www.baidu.com/s?wd=");
//构造访问的地址
GetDlgItem(IDC_EDIT1)->GetWindowText(m_ip);
straddress+=m_ip;
straddress+="&cl=3";
CInternetSession mySession(NULL,0);
//构造一个新的会话
CHttpFile* myHttpFile=NULL;
CString strline;
myHttpFile=(CHttpFile*)mySession.OpenURL(straddress);//打开网址
if(myHttpFile==NULL)
{
MessageBox("OpenURL ERROR!");
return;
}
while(myHttpFile->ReadString(strline))//读取返回的内容
{
m_ReturnStr+=strline;
}
m_ReturnStr.Delete(0,m_ReturnStr.Find("来自")+6);
CString str=m_ReturnStr.Left(m_ReturnStr.Find(" "));
myHttpFile->Close ;
mySession.Close ;
}