C++实现http上载有关问题

C++实现http下载问题今天用C++实现一个http下载文件程序的流程是这样的:先取到文件大小向服务器发包取1

C++实现http下载问题
今天用C++实现一个http下载文件程序的流程是这样的:先取到文件大小==>向服务器发包取102400个字节的数据==>不停接收写文件==>向服务器发包取下一个102400个字节的数据==>不停接收写文件==>直到文件下载完毕
但文件下载到一段时间后就会报“Connection reset by peer”,请解。
下面是部分代码

C/C++ code
// 格式化请求头void CHttpGet::formatReqHead(long lFrom/* = 0 */, long lTo/* = 0 */, bool bType/* = true */){    char temp[125];    m_sReqHead = "";    m_sReqHead += "GET ";    m_sReqHead += m_sGet;    m_sReqHead += " HTTP/1.1\r\n";    m_sReqHead += "Accept: */*\r\n";    //m_sReqHead += "Referer: http://localhost/index.html\r\n";    //m_sReqHead += "Accept-Language: zh-cn\r\n"; // utf-8    //m_sReqHead += "Accept-Encoding: gzip, deflate\r\n";    //m_sReqHead += "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";    memset(temp, 0x00, sizeof(temp));    sprintf(temp, "Host: %s:%d\r\n", m_sHost.c_str(), m_iPort);    m_sReqHead += string(temp);    m_sReqHead += "Connection: Keep-Alive\r\n";        if (!bType)    {        memset(temp, 0x00, sizeof(temp));        sprintf(temp, "Range: bytes=%ld-%ld\r\n", lFrom, lTo);        m_sReqHead += string(temp);    }    m_sReqHead += "\r\n";        std::cout << "****m_sReqHead:" << std::endl;    std::cout << "******************" << std::endl;    std::cout << m_sReqHead;    std::cout << "******************" << std::endl;    return;}// 写文件bool CHttpGet::writeBlock(long lOffset, long lLen){    formatReqHead(lOffset, lOffset + lLen - 1, false);    // 格式化请求头    if (!sendReqHead())    // 发送请求头    {        std::cout << "[writeBlock][sendReqHead error]" << std::endl;        return -1;    }        if (!m_fsDestFile.is_open())        m_fsDestFile.open(m_sDestFile.c_str(), ios::binary|ios::in|ios::out);    if (!m_fsDestFile)    {        std::cout << "cannot open file: " << m_sDestFile << std::endl;        return false;    }    int iRecvBytes = 0;    int iAllRecvBytes = 0;    char cBuff[MAX_RCVBLOCK_SIZE + 1];    while(1)    {        memset(cBuff, 0x00, sizeof(cBuff));        iRecvBytes = recv(m_iSock, cBuff, MAX_RCVBLOCK_SIZE, 0);        if (iRecvBytes > 0)        {            m_fsDestFile.seekp(m_lRecvLen, ios::beg);            m_fsDestFile.write(cBuff, iRecvBytes);            iAllRecvBytes += iRecvBytes;            m_lRecvLen += iRecvBytes;        }        else if (iRecvBytes < 0)        {            std::cout << "iRecvBytes = " << iRecvBytes << " " << errno << ":" << strerror(errno) << std::endl;            std::cout << "iRecvBytes:" << iRecvBytes                     << " iAllRecvBytes: " << iAllRecvBytes                    << " m_lRecvLen: " << m_lRecvLen                     << " m_lTotalLen: " << m_lTotalLen << std::endl;            return false;        }        std::cout << "iRecvBytes:" << iRecvBytes                     << " iAllRecvBytes: " << iAllRecvBytes                    << " m_lRecvLen: " << m_lRecvLen                     << " m_lTotalLen: " << m_lTotalLen << std::endl;        if (iAllRecvBytes >= lLen)            break;    }    std::cout << "=====m_lRecvLen:" << m_lRecvLen << " iAllRecvBytes: " << iAllRecvBytes << std::endl;            return true;}


[解决办法]
所需头文件
//windows头文件
#include <afx.h>
#include <afxinet.h>
------解决方案--------------------


探讨
刚在网上找了一个例子,简单改了一下,运行也报相同的错误,不知道是什么原因
代码如下:

C/C++ code

#include <iostream>
#include <stdio.h>
#include <strings.h>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#……

[解决办法]
一个简单的命令行就搞定了
system("wget www.vijaymukhi.com/vmis/index.html -O /D13879EB5608/qqwry.dat");
[解决办法]
探讨
我用“wget http://www.newxing.com/D13879EB5608/qqwry.dat”下载到1.6M多也会报相同的错,难道是网站做什么设置了?

17% [=====================> ] 1,654,784 21.1K/s eta(英国中部时17% [=====================> ] 1,662,024 19.2K/s eta(英国中部时……

[解决办法]
探讨
今天用浏览器下载也是有问题,晕。