直接用socket实现HTTP协议(下载专用)
2010-05-27 20:39:44 来源:WEB开发网核心提示:取得回应头后,如果回应码为2XX并且“Content-Length”的值不等于0就表示可以接收下载文件数据了,直接用socket实现HTTP协议(下载专用)(3),接下来的工作就很简单了,调用 CHttpSocket::Recevie()直到接收的数据长度等于“Content-Len
取得回应头后,如果回应码为2XX并且“Content-Length”的值不等于0就表示可以接收下载文件数据了,接下来的工作就很简单了,调用 CHttpSocket::Recevie()直到接收的数据长度等于“Content-Length”的值就可以了 。
一个完整的使用过程由以下几个步骤组成:
调用AfxParseURL()分析URL得到Server和下载路径;
调用CHttpSocket::Socket()创建套接字;
调用CHttpSocket::Connect()连接服务器;
调用CHttpSocket::FormatRequestHeader()格式化请求头;
调用CHttpSocket::SendRequest()向服务器发送请求头;
调用CHttpSocket::GetServerState()得到回应状态码;
调用CHttpSocket::GetField("Content-Length")得到下载文件的大小;
调用CHttpSocket::Receive()接收数据直到数据接收完成;
本文附带源代码还包括了一个使用 CHttpSocket 实现下载功能的例子工程。注意,所有的调用都是阻塞的,所以最好为一个下载任务创建一个线程 ,否则会导致界面无法响应用户输入。程序运行界面如下图所示:
更多精彩
赞助商链接