#include <afxinet.h>
#include "wininet.h"

#pragma comment( lib, "wininet.lib" )

string remoteIP = "http://www.test.com:8001";
string testIP = getDomain("IP");
string testPort = getDomain("PORT");
if (testIP != "NULL" && testPort != "NULL")
{
remoteIP = "http://" + testIP + ":"+ testPort;
}
logs.addLog("当前IP", remoteIP);
string finalURL = remoteIP + "/autoupdater.xml";
Divice_info dinfo;
finalURL += "?bit=";
finalURL += dinfo.getSystemByte().c_str();
finalURL += "&mem=";
finalURL += dinfo.getMem_info().c_str();
finalURL += "&disk=";
finalURL += dinfo.getDisk_info().c_str();
finalURL += "&os=";
finalURL += dinfo.getOSVersion_info().c_str();
finalURL += "&sys=";
finalURL += dinfo.getSystem_info().c_str();
finalURL += "&fingerprint=";
finalURL += m_fingerprint;
finalURL += "&version=";
TinyXmlConfig *txc = new TinyXmlConfig();
string version;
string configxml = m_workdirection + "\\config\\config.xml";
BOOL check = txc->getAttribute(configxml,"version", version);
if (FALSE == check)
{
version = "0.0.0.0";
}
finalURL += version;
finalURL += "&protocol=0";//twain logs.addLog(finalURL);
try {
//写入本地xml
string tempxml = m_workdirection + "\\config\\temp.xml";
/*
//从服务器获取xml文件
HINTERNET hOpen = InternetOpen("RookIE/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hOpen == NULL)
{
logs.addLog("isUpdate() Internet Open fail...");
return FALSE;
}
HINTERNET hUrl = InternetOpenUrl(hOpen, finalURL.c_str(), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
if (hUrl == NULL)
{
logs.addLog("isUpdate() Internet OpenUrl fail...");
InternetCloseHandle(hOpen);
return FALSE;
}
char buffer[10240];
DWORD readByte = 0;
DWORD writeByte = 0;
BOOL hread, hwrite;
buffer[readByte] = '\0'; HANDLE createfile;
createfile = CreateFile(tempxml.c_str(), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (createfile == INVALID_HANDLE_VALUE)
{
logs.addLog("isUpdate() Create temp.xml failed!");
return FALSE;
}
int flag = 0;
while (true)
{
hread = InternetReadFile(hUrl, buffer, sizeof(buffer), &readByte);
if (hread == FALSE)
{
logs.addLog("isUpdate() hUrl read buffer fail...");
flag++;
break;
}
if (readByte == 0)
{
logs.addLog("isUpdate() temp.xml writeed successful...");
break;
}
hwrite = WriteFile(createfile, buffer, readByte, &writeByte, NULL);
if (hwrite == FALSE)
{
flag++;
logs.addLog("isUpdate() temp.xml write buffer fail...");
break;
}
}
CloseHandle(createfile);
InternetCloseHandle(hOpen);
InternetCloseHandle(hUrl);
*/
//if (flag>0)
//return FALSE;
bool flag = false;
HRESULT urldown = URLDownloadToFile(NULL,finalURL.c_str(), tempxml.c_str(),,NULL);
if (E_OUTOFMEMORY == urldown)
{
logs.addLog("server url xml is download fail");
}
else if (S_OK == urldown)
{
flag = true;
logs.addLog("server url xml is dowload successful");
}
else if (INET_E_DOWNLOAD_FAILURE == urldown)
{
logs.addLog("server url xml is not exist");
}
logs.addLog("server url xml返回值HREDULT",to_string(urldown));
if (flag)
{
string value;
BOOL hr = txc->getAttribute(tempxml, "NeedUpdate", value);
BOOL h1 = txc->getAttribute(tempxml, "url", m_urlZip);
BOOL h2 = txc->getAttribute(tempxml, "lastver", m_lastVersion);
BOOL h3 = txc->getAttribute(tempxml, "md5", m_md5);
BOOL h4 = txc->getAttribute(tempxml, "size", m_filesize);
delete txc;
if (FALSE == h1 || FALSE == h2 || FALSE == h3 || FALSE == h4)
{
logs.addLog("isUpdate() temp.xml url or lastver or md5 or get size get fail...");
return FALSE;
}
if (hr == TRUE)
{
logs.addLog("isUpdate() NeedUpdate : ", value);
if (_stricmp(value.c_str(), "true") == )
{
logs.addLog("isUpdate() NeedUpdate's value is True");
return TRUE;
}
else {
logs.addLog("isUpdate() NeedUpdate' value is Flase");
return FALSE;
}
}
else {
logs.addLog("isUpdate() temp.xml getAttribute fail..");
return FALSE;
}
}
}
catch (exception e)
{
logs.addLog("isUpdate() Exception");
return FALSE;
}

C++服务器下载文件的两种方式的更多相关文章

  1. java 下载文件的两种方式和java文件的上传

    一:以网络的方式下载文件 try { // path是指欲下载的文件的路径. File file = new File(path); // 以流的形式下载文件. InputStream fis = n ...

  2. C#从服务器下载文件的四种方式

    //方法一:TransmitFile实现下载 string fileName = "ss.docx"; //客户端预设的文件名,导出时可修改  string filePath = ...

  3. jsp:jsp包含文件的两种方式

    第一种:include指令 include指令:当JSP转换成Servlet时引入指定文件(指令元素),这是一种静态包含,它运行的时候不会单独编译成.class文件,它生成一个新的整体.class文件 ...

  4. Eclipse项目中引用第三方jar包时将项目打包成jar文件的两种方式

    转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFES ...

  5. 加载xib文件的两种方式

    一.加载xib文件的两种方式 1.方法一(NewsCell是xib文件的名称) NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@&quo ...

  6. js 图片base64转file文件的两种方式

    js 图片base64转file文件的两种方式 https://blog.csdn.net/yin13037173186/article/details/83302628 //将base64转换为bl ...

  7. 从后端接口下载文件的2种方式:get方式、post方式

    从后端接口下载文件的2种方式 一.get方式 直接使用: location.href='http://www.xxx.com/getFile?params1=xxx&params2=xxxx' ...

  8. 【文件下载】Java下载文件的几种方式

    [文件下载]Java下载文件的几种方式  摘自:https://www.cnblogs.com/sunny3096/p/8204291.html 1.以流的方式下载. public HttpServl ...

  9. Springboot 创建的maven获取resource资源下的文件的两种方式

    Springboot 创建的maven项目 打包后获取resource下的资源文件的两种方式: 资源目录: resources/config/wordFileXml/wordFileRecord.xm ...

随机推荐

  1. java 线程池 使用实例

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  2. SSE图像算法优化系列四:图像转置的SSE优化(支持8位、24位、32位),提速4-6倍

    一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...

  3. ASP.NET CORE 之 在IIS上部署MVC项目

    与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kestrel ...

  4. 救基友3(三维BFS)

    救基友记3 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述   话说CZ因为不守基道.被妖怪抓走了.好基友WP在努力讨好高富帅 ...

  5. c++11 简明学习

    https://coolshell.cn/articles/5265.html http://www.cnblogs.com/me115/p/4800777.html#h29 https://chan ...

  6. 安装Logtail(Linux系统)

    Logtail客户端是日志服务提供的日志采集客户端,请参考本文档,在Linux服务器上安装Logtail客户端. 支持的系统 支持如下版本的Linux x86-64(64位)服务器: Aliyun L ...

  7. linux达人养成计划学习笔记(七)—— 用户登录查看命令

    一.查看用户登录信息 1.命令格式 w 2.命令结果 第一行信息是:系统当前时间     系统运行总时间     登录用户数量     一分钟/五分钟/十分钟的系统负载(越大越差) 二.who命令 1 ...

  8. Android--保持加速度传感器在屏幕关闭后运行(收集)

    由于写论文需要,需要用手机加速度采集数据,关于android加速度传感器的介绍网上一抓一大把,但大多都是大同小异,跟官网文档差不多.自己写了个取加速度传感器的APK,发现数据有点不对劲,原理屏幕一关后 ...

  9. 【Linux高级驱动】如何分析并移植网卡驱动

    dm9000的驱动分析 m9000_init platform_driver_register(); db); db); );  ; id_val ; id_val ; /* 获取芯片型号 */ id ...

  10. 原生AJAX请求教程

    ajax 即 Asynchronous Javascript And XML,AJAX 不是一门的新的语言,而是对现有持术的综合利用.本质是在 HTTP 协议的基础上以异步的方式与服务器进行通信. 异 ...