#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. 学习Spring-Session+Redis实现session共享

    1.添加依赖 <dependency> <groupId>org.springframework.session</groupId> <artifactId& ...

  2. JAVA消息服务JMS规范及原理详解

    JAVA消息服务JMS规范及原理详解 一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应 ...

  3. oracle数据库将一列的值拼接成一行,并且各个值之间用逗号隔开

    使用场景:把某一列值转换为逗号分隔的字符串 例子:比如查询所有的的表空间如下,现在要获得所有的表空间用逗号分隔的字符串(比如rman duplicate的时候skip表空间) SQL> sele ...

  4. cProfile——Python性能分析工具

    Python自带了几个性能分析的模块:profile.cProfile和hotshot,使用方法基本都差不多,无非模块是纯Python还是用C写的.本文介绍cProfile.  例子 import t ...

  5. SVProgressHUD在viewDidLoad里无法显示的bug

    两年前已经开始讨论,至今没有解决方案.https://github.com/samvermette/SVProgressHUD/issues/54 [SVProgressHUD show] 的逻辑要放 ...

  6. SNF快速开发平台MVC-富文本控件集成了百度开源项目editor

    一.效果如下: 二.在框架当中调用代码如下: 1.在js里配置如下: <script type="text/javascript"> var viewModel =fu ...

  7. Spark 论文篇-RDD:一种为内存化集群计算设计的容错抽象(中英双语)

    论文内容: 待整理 参考文献: Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster C ...

  8. JPA+Hibernate 3.3 ——增删改查

    1.     查找对象   1)  用find()方法查找对象 public void getPerson(){ EntityManagerFactory factory = Persistence. ...

  9. js 对象数组查找元素常用方法

    let the_spec_List_Vaule = res.Data.Spec_List_Vaule.find(function(x) { return x.Spec_Item_List == pro ...

  10. 【Android】Android输入子系统

    成鹏致远 | lcw.cnblogs.com | 2013-10-25 Linux输入子系统回顾 1:为什么要回顾linux输入子系统?这个问题后面自然就知道了 1.linux输入子系统设备是基于平台 ...