VC断点续传注意的几点
来源:互联网 发布:婚姻知乎 编辑:程序博客网 时间:2024/05/17 02:34
1、保存断点值。以便下一次传输时使用,在设计HTTP请求头时直接使用,如下面的dwDownloadSize:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 填充信息头
strSend = L"GET " + strObject + L" HTTP/1.1\r\n";
strSend += L"Host: " + strServer + L"\r\n";
strSend += L"Accept: */*\r\n";
strSend += L"Pragma: no-cache\r\n";
strSend += L"Cache-Control: no-cache\r\n";
if( !m_strReferer.IsEmpty() )
strSend += L"Referer: " + strReferer + L"\r\n";
strSend += L"Connection: close\r\n";
// Range字段,断点续传的关键
strRange.Format(_T("Range: bytes=%d-\r\n"), dwDownloadSize); // dwDownloadSize 就是断点值
if(m_bSupportResume)
strSend += strRange;
//必须要加一个空行,否则Http服务器将不会应答
strSend += L"\r\n";
strSend = L"GET " + strObject + L" HTTP/1.1\r\n";
strSend += L"Host: " + strServer + L"\r\n";
strSend += L"Accept: */*\r\n";
strSend += L"Pragma: no-cache\r\n";
strSend += L"Cache-Control: no-cache\r\n";
if( !m_strReferer.IsEmpty() )
strSend += L"Referer: " + strReferer + L"\r\n";
strSend += L"Connection: close\r\n";
// Range字段,断点续传的关键
strRange.Format(_T("Range: bytes=%d-\r\n"), dwDownloadSize); // dwDownloadSize 就是断点值
if(m_bSupportResume)
strSend += strRange;
//必须要加一个空行,否则Http服务器将不会应答
strSend += L"\r\n";
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 打开文件(已存在的.sp临时文件)
CFile DLoadFile;
CFileException ex;
if(DLoadFile.Open(pfileDLoadInfo->tempFile, CFile::modeWrite, &ex))
{
//DLoadFile.SeekToEnd();
DLoadFile.Seek(pfileDLoadInfo->dwDownloadSize, CFile::begin);
}
else
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
CString strerr;
strerr.Format(_T("不能打开文件.sp临时文件\r\n错误是 %s"), szError);
AfxMessageBox(strerr);
//DLoadFile.Close();
return -1;
}
CFile DLoadFile;
CFileException ex;
if(DLoadFile.Open(pfileDLoadInfo->tempFile, CFile::modeWrite, &ex))
{
//DLoadFile.SeekToEnd();
DLoadFile.Seek(pfileDLoadInfo->dwDownloadSize, CFile::begin);
}
else
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
CString strerr;
strerr.Format(_T("不能打开文件.sp临时文件\r\n错误是 %s"), szError);
AfxMessageBox(strerr);
//DLoadFile.Close();
return -1;
}
3、每一次请求HTTP连接时,接收的数据都应该减掉应答头。(断点续传每次连接都要减去),如:
2
3
4
5
6
7
// 接收第一个响应包
CHAR szReadBuf[BUFFERSIZE];
DWORD dwFirstData = pSocket.Receive(szReadBuf, BUFFERSIZE);
int n = GetHeadLength(szReadBuf); // 获得应答头的长度
m_dwDownloadSize = dwFirstData-n; // 除去应答头后的数据长度
// 第一次写入数据
DLoadFile.Write(szReadBuf+n, m_dwDownloadSize); // 从第n个字节开始的数据写入到文件
CHAR szReadBuf[BUFFERSIZE];
DWORD dwFirstData = pSocket.Receive(szReadBuf, BUFFERSIZE);
int n = GetHeadLength(szReadBuf); // 获得应答头的长度
m_dwDownloadSize = dwFirstData-n; // 除去应答头后的数据长度
// 第一次写入数据
DLoadFile.Write(szReadBuf+n, m_dwDownloadSize); // 从第n个字节开始的数据写入到文件
- VC断点续传注意的几点
- VC 编译Lib DLL需要注意的几点
- Java 实现断点续传的关键几点
- array的几点注意
- 索引的几点注意
- ACL的几点注意
- 注意virtual的几点!
- iocp注意的几点
- 指针的几点注意点
- activity生命周期的几点注意点
- VC学习和使用需要注意的几点,千万不要忽略(转)
- strcpy的需要注意的几点
- 使用密码文件的几点注意
- php中需要注意的几点
- web.xml 需要注意的几点
- 售前应该注意的几点
- 构造函数的几点注意
- AJAX.NET:CascadingDropDown的几点注意
- auto make
- [小说]魔王冢(16)寻凶(二)
- [翻译] 前端 JavaScript 架构(完结)
- HDU 1496 Equations
- 最好用的20个数据可视化工具(四)
- VC断点续传注意的几点
- VB与sql server的连接
- POJ2488(骑士遍历)【dfs个人第一题!】
- js监听键盘事件示例代码
- adb server is out of date. killing...
- servlet类的几个基本对象
- linux中强大且常用命令:find、xargs、grep
- java培训第二次课后笔记
- linux下rm命令的用法