这两天在写一个B/S结构的远程控制程序,用到Win32api HttpDownloadToFile()时遇到了这样一个问题:如果把下载文件函数放在一个循环里面时,即使服务器端执行的程序发生变化,下载的也是之前的内容。
后来突然想到了ajax中发送请求时用的一个技巧:因为服务器有缓存,为了不让缓存影响到我们获取的内容,加了一个time(),但是对于c++来说 有一个更简单的思路:
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include <UrlMon.h>
#pragma comment(lib, "urlmon.lib")
char cmd[100];
char url[100]="http://localhost/bq.php?M=99a&tim="; //请求的地址,第二个tim是一个无关的变量
char tmp[100];
int len=strlen(url),key=0;//获取url的长度
void exec();//exec model
void sleep();
void readfile();
int main(void)
{
exec();
}
void sleep(void)
{
int t=100000000;
while(t--);
return;
}
void exec()
{
while(1)
{
if(key<100)url[len]=key++; //这个地方便是核心部分,将无关变量每次都加上一个不同的数字 没必要加一个时间
else {key=1;url[len]=key++;}
url[len+1]='\0'; //注意字符串结尾
URLDownloadToFile(NULL,url,"c:\\a.txt",0,NULL);
readfile();
printf("%s",cmd);
if(!strcmp(cmd,tmp))continue;
strcpy(tmp,cmd);
system(cmd);
}
}
void readfile()
{
FILE *pF=fopen("c:\\a.txt", "r+");
fgets(cmd,1024,pF);
fclose(pF);
remove("c:\\a.txt");
}
php端因为是测试 所以用的是之前版权验证的页面,每次刷新数字便会减一。
第一次自己动手写一个网络程序,虽然是api,虽然还不会socket,但我相信会有一天。