这几天一直在写利用URLDownloadToFile这个函数读取自己的外网IP,但使用时遇到一个这样的问题。第一次调用URLDownloadToFile这个函数时能正确读取到外网IP,但当使用VPN改变了自己的外网IP后,再调用URLDownloadToFile这个函数时,读取的结果仍然是改变前的IP,无法获取用vpn改变后的IP,请问哪位老大能指点一下是什么原因吗?附我的获取外网IP的函数如下:
void getcurrentip()
{
TCHAR buf[65535] = {0};
fstream fip;
int i=0,j=0,j1=0,s=1;
TCHAR ch; URLDownloadToFile(0,"http://www.ip138.com/ip2city.asp","ip.txt",0,NULL); for (i=0;i<16;i++)
chIP[i]=0;
i=0; fip.open("ip.txt",ios::in);
while (fip.get(ch))
{
buf[i]=ch;
i++;
}
fip.close();
DeleteFile("ip.txt");
while ((i>0)&&(s==1))
{
if (buf[j]=='[')
{
while (buf[j+j1+1]!=']')
{
chIP[j1]=buf[j+j1+1];
j1++;
}
s=0;
}
i--;
j++;
}
return;
}
其中chIP[i]是一个全局变量,用于存放读取的IP。我感觉这个函数应该没有问题,因为我单步运行这个函数,在使用VPN改变了自己的IP地址的情况下,单步运行到调用完URLDownloadToFile这个函数后,发现ip.txt这个文件中获取的IP仍然是使用VPN更改前的IP。应该是URLDownloadToFile这个函数使用方面存在问题。
void getcurrentip()
{
TCHAR buf[65535] = {0};
fstream fip;
int i=0,j=0,j1=0,s=1;
TCHAR ch; URLDownloadToFile(0,"http://www.ip138.com/ip2city.asp","ip.txt",0,NULL); for (i=0;i<16;i++)
chIP[i]=0;
i=0; fip.open("ip.txt",ios::in);
while (fip.get(ch))
{
buf[i]=ch;
i++;
}
fip.close();
DeleteFile("ip.txt");
while ((i>0)&&(s==1))
{
if (buf[j]=='[')
{
while (buf[j+j1+1]!=']')
{
chIP[j1]=buf[j+j1+1];
j1++;
}
s=0;
}
i--;
j++;
}
return;
}
其中chIP[i]是一个全局变量,用于存放读取的IP。我感觉这个函数应该没有问题,因为我单步运行这个函数,在使用VPN改变了自己的IP地址的情况下,单步运行到调用完URLDownloadToFile这个函数后,发现ip.txt这个文件中获取的IP仍然是使用VPN更改前的IP。应该是URLDownloadToFile这个函数使用方面存在问题。
解决方案 »
- MFC 绘制移动小球问题
- CBCGPDockingControlBar的窗口重绘~
- 如何用snmp调用被监控端的可执行程序?
- 如何在属性对话框标题栏加图标和最小化按钮?
- vc++出学者,高手请进!
- vc主要用在哪些领域?
- 菜鸟关于菜单的问题
- 精通进程,线程和ADO/ODBC连接数据库技术的大师们,请多关照! (还在线上晾着呢!)
- 这到底该怎么办?十万火急。。。在线等 拜托高手
- 问两个MFC工程是否可以连接(比如通过一个按钮进行跳转),可以的话怎么做?
- List Control Properties中styles->view的Small Icon与List有什么区别?
- vc++多文档窗体不通过向导怎么添加
直接登陆http://www.ip138.com/ip2city.asp这个网页看看显示....
看看使用VPN和不使用VPN有没有区别
感谢朋友们的热心帮助