http://blog.csdn.net/segen_jaa/article/details/6278167

背景:

功能:服务端下载文件

服务端:用Java写Sevlet进行有效性验证

客户端:用C++写程序,获取文件

C++使用下载类为MFCWinInet,下载协议为HTTP。

MFCWinInet下载优缺点如下。

优点:使用封装类,直接调用相关方法,使用方便。

缺点:多线程下载,线程数受注册表限制,XP下默认为两个。

WinInet(“Windows Internet”)支持三种协议:

1、HTTP:Hypertext Transfer Protocol(超文本传输协议);

2、FTP:File Transfer Protocol(文件传输协议);

3、Gopher文件传输协议。

MFCWinInet HTTP协议,使用类为:

1、CHttpConnection:管理与HTTP服务器的连接。

2、CInternetSession.

3、CHttpFile:提供向HTTP服务器中请求和读取的功能。

要与一个HTTP服务器通讯,必须先构造一个CInternetSession的实例,然后构造一个CHttpConnection对象。不能直接构造一个CHttpConnection对象,而是调用CInternetSession::GetHttpConnection,创建CHttpConnection对象并返回其指针。

#include <afxinet.h>

eg.

if(AfxParseURL(URL,server_type,strServer,path,port))

{

return;

}

CInternetSession * m_inernetSession = new CinternetSession();

CHttpConnection * m_httpConnection =

m_inernetSession->GetHttpConnection(strServer, port,);

CHttpFile * m_httpfile = m_httpConnection ->OpenRequest();

//使用ChttpFile建立发送的Http报文

CString strHeadInfo = _T("");

// 发送Head请求

pHttpFile->SendRequest(strHeadInfo)

if (pHttpFile->QueryInfoStatusCode(dwStatusCode)

&& (dwStatusCode >= 200 && dwStatusCode < 300))

{

pHttpFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strResponse);

}

else

{

return;

}

//对strResponse返回值解析

if (ParseResponse(strResponse))

{

return;

}

unsigned char bufRec[BUFF_SIZE] = {0};

UINT uReadSize = 0;

while (true)

{

ZeroMemory(bufRec, BUFF_SIZE);

uReadSize = pHttpFile->Read(bufRec, BUFF_SIZE);

if (uReadSize <= 0)

{

break;

}

tempFile.Write(bufRec, uReadSize);

}

MFCWinInet学习的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

随机推荐

  1. Kubernetes之POD

    什么是Pod Pod是可以创建和管理Kubernetes计算的最小可部署单元.一个Pod代表着集群中运行的一个进程. Pod就像是豌豆荚一样,它由一个或者多个容器组成(例如Docker容器),它们共享 ...

  2. Java Web之Http协议

    为什么会出现HTTP协议?有什么用? 浏览器和服务器之间进行数据的沟通的时候,需要标准,浏览器有Chrome浏览器,火狐浏览器,IE浏览器等.服务器有Tomcat服务器,IIS服务器等,由于各自标准不 ...

  3. Web API中的路由(二)——属性路由

    一.属性路由的概念 路由让webapi将一个uri匹配到对应的action,Web API 2支持一种新类型的路由:属性路由.顾名思义,属性路由使用属性来定义路由.通过属性路由,我们可以更好地控制We ...

  4. 阅读:ECMAScript 6 入门(2)

    参考 ECMAScript 6 入门 ES6新特性概览 ES6 全套教程 ECMAScript6 (原著:阮一峰) JavaScript 教程 重新介绍 JavaScript(JS 教程) Modul ...

  5. ElasticSearch - Shard数调优(ElasticSearch性能)

    序言 资料 https://blog.csdn.net/waneyongfu/article/details/78215972

  6. Div Height设置高度后不能自适应

    解决方法$("#div1").css("height", "");

  7. MySQL的一些基本命令笔记(1)

    关系型数据库的建模构建块: 1.数据是以行和列的形式存储数据. 2.这一系列的行和列称为表(关系) 3.表中的每一行表示一条记录(元组) 4.表中的每一列表示记录的一个属性 5.一组表组成了数据库 6 ...

  8. php制作圆形用户头像——自定义封装类源代码

    思路 使用图层的方法设计,共需要创建3个图像层 1.底层:最后生成的图像 2.真实用户头像:作为中间层,用户上传的真实头像图片 3.圆形蒙版:作为最上层,在蒙版中绘制圆形,并设置为透明 如图: 代码如 ...

  9. Docker(一)基本概念

    摘自 https://mp.weixin.qq.com/s/mcIMBMNMrFD9OE56iujhXQ 一.容器和虚拟机的比较 1.虚拟机 对于以前熟悉的虚拟机,我们需要模拟操作系统和硬件.虚拟机一 ...

  10. “无法找到XXX.exe的调试信息,或调试信息不匹配”解决方案

    错误信息如下: 解决方法: 选择项目属性,依次序进行如下操作. 1.选择 配置属性->链接器->调试->生成调试信息 改为 是 一般问题都是出现在这个地方,修改完了可以尝试运行,若还 ...