MFCWinInet学习

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);

}

posted @   廖先生  阅读(508)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示