青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

[轉帖]HTTP實現斷點再續

從HTTP服務器上下載一個文件有很多方法,“熱心”的微軟提供了 WinInet 類,用起來也很方便。當然,我們也可以自己實現這些功能,通過格式化請求頭很容易就能實現斷點續傳和檢查更新等等功能 。
1. 連接主機
2. 格式化請求頭
3. 設置接收,發送超時
  
要想從服務器下載文件,首先要向服務器發送一個請求。HTTP 請求頭由若干行字符串組成。下面結合實例說說 HTTP 請求頭的格式。假設要下載 http://www.sina.com.cn/index.html 這個網頁 ,那么請求頭的寫法如下:

第1行:方法,請求的內容,HTTP協議的版本
下載一般可以用GET方法,請求的內容是“/index.html”,HTTP協議的版本是指瀏覽器支持的版本,對于下載軟件來說無所謂,所以用1.1版 “HTTP/1.1”;
“GET /index.html HTTP/1.1”

第2行:主機名,格式為“Host:主機”
在這個例子中是:“Host:www.sina.com.cn”

第3行:接受的數據類型,下載軟件當然要接收所有的數據類型,所以:
“Accept:*/*”

第4行:指定瀏覽器的類型
有些服務器會根據客戶服務器種類的不同會增加或減少一些內容,在這個例子中可以這樣寫:
“User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)”
第5行:連接設置
設定為一直保持連接:“Connection:Keep-Alive”

第6行:若要實現斷點續傳則要指定從什么位置起接收數據,格式如下:
“Range: bytes=起始位置 - 終止位置”
比如要讀前500個字節可以這樣寫:“Range: bytes=0 - 499”;從第 1000 個字節起開始下載:
“Range: bytes=999 -”
最后,別忘了加上一行空行,表示請求頭結束。整個請求頭如下:
GET /index.html HTTP/1.1
Host:www.sina.com.cn
Accept:*/*
User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Connection:Keep-Alive
下面用例子看看如何進行斷點的下載吧
//?DownloadFile.h:?interface?for?the?CDownloadFile?class.
//
//////////////////////////////////////////////////////////////////////

#if?!defined(AFX_DOWNLOADFILE_H__E9A59779_BEF9_4A78_8D0E_ED8C9498E07C__INCLUDED_)
#define?AFX_DOWNLOADFILE_H__E9A59779_BEF9_4A78_8D0E_ED8C9498E07C__INCLUDED_

#if?_MSC_VER?>?1000
#pragma?once
#endif?//?_MSC_VER?>?1000

#define?NOTIFY_MSG_WPARAM_GENDOWNFILEID?0x01

#define?NOTIFY_MSG_LOW_WPARAM_FULLSIZE?0x10
#define?NOTIFY_MSG_LOW_WPARAM_CURRENTSIZE?0x20
#define?NOTIFY_MSG_LOW_WPARAM_DOWNSIZE?0x30
#define?NOTIFY_MSG_LOW_WPARAM_DOWNSPEED?0x40

class?CDownloadFile?
{
public:
BOOL?OpenRedirectHttpURL(CString?
&strOldLocation,CInternetSession?&cSession);
BOOL?DownLoadFile(LPCTSTR?lpFileURL,LPCTSTR?lpSaveFile);
CDownloadFile();
virtual?~CDownloadFile();
LPCTSTR?GetSavedFileName()?
{?return?m_strSaveToFile;}
LPCTSTR?GetDownURL()?
{?return?m_strFileURL;}

public:
WORD?GenFileID();
void?RegisterNotifyWindow(DWORD?dwThreadID,HWND?hWnd,DWORD?dwMsg);
BOOL?GetUNCFile();
bool?m_bForceReload;
DWORD?m_TimeOut;
WORD?m_wFileID;

protected:
DWORD?m_dwThreadID;
void?PostNotifyMessage(WPARAM?wParam,?LPARAM?lParam);
DWORD?m_dwMsgID;
HWND?m_hNotify;
BOOL?GetFtpFile(CInternetSession?
&cSession);
BOOL?GetHttpFile(CInternetSession?
&cSession);
CString?m_strTmpFileName;
CString?m_strFileURL;
CString?m_strSaveToFile;
CString?m_rawHeaders;
float?m_transferRate;
DWORD?m_infoStatusCode;
}
;

#endif?//?!defined(AFX_DOWNLOADFILE_H__E9A59779_BEF9_4A78_8D0E_ED8C9498E07C__INCLUDED_)

//?DownloadFile.cpp:?implementation?of?the?CDownloadFile?class.
//
//////////////////////////////////////////////////////////////////////

#include?
"stdafx.h"
#include?
"DownloadFile.h"

#pragma?comment(?lib,
"Wininet.lib"?)

#include?
"shlwapi.h"
#pragma?comment(?lib,
"shlwapi.lib"?)

#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif

#define?BUFFER_SIZE?4095

const?TCHAR?szHeaders[]?=?_T("Accept:?*/*\r\nUser-Agent:?Mozilla/4.0?(compatible;?MSIE?5.00;?Windows?98)\r\n");

//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDownloadFile::CDownloadFile()
{
m_TimeOut?
=?0;
m_bForceReload?
=?true;
m_dwThreadID?
=?0;
m_hNotify?
=?NULL;
m_dwMsgID?
=?0;
m_wFileID?
=?0;
}


CDownloadFile::
~CDownloadFile()
{

}


BOOL?CDownloadFile::DownLoadFile(LPCTSTR?lpFileURL,?LPCTSTR?lpSaveFile)
{
BOOL?bRet?
=?FALSE;
if?(?!::PathIsURL(lpFileURL)?)
{
return?bRet;
}

m_strSaveToFile?
=?lpSaveFile;
m_strFileURL?
=?lpFileURL;
m_strTmpFileName?
=?lpSaveFile;
m_strTmpFileName?
+=?_T(".df!");
CString?strServer,strObject;INTERNET_PORT?nPort;
CString?strAgentCaption?
=?_T("Update?Download?")?;
strAgentCaption?
+=?::PathFindFileName(lpSaveFile);
DWORD?dwFlags?
=?0;
InternetGetConnectedState(
&dwFlags,?0);
CInternetSession?session?(strAgentCaption,?
1,

(dwFlags?
&?INTERNET_CONNECTION_PROXY)?==?INTERNET_CONNECTION_PROXY???INTERNET_OPEN_TYPE_PRECONFIG?:?INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,
NULL,?NULL,?
0);
AfxParseURL(m_strFileURL,dwFlags,strServer,strObject,nPort);

if?(m_TimeOut?!=?0)
session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT,?m_TimeOut);
if(?!m_wFileID?)
m_wFileID?
=?GenFileID();
PostNotifyMessage(NOTIFY_MSG_WPARAM_GENDOWNFILEID,m_wFileID);

try
{
if?(?dwFlags==?AFX_INET_SERVICE_HTTP?)
{
bRet?
=?GetHttpFile(session);
}

else?if(?dwFlags==?AFX_INET_SERVICE_FTP?)
{
bRet?
=?GetFtpFile(session);
}

else?if(?dwFlags==?AFX_INET_SERVICE_FILE?)
{
if(?UrlIsFileUrl(m_strFileURL)?)
bRet?
=?GetUNCFile();
}

else
{
;
}
?
}

catch?(CException*?pEx)
{
TCHAR?szErrorMsg[MAX_PATH]?
=?{0};
pEx
->GetErrorMessage(szErrorMsg,?MAX_PATH);
TRACE(?_T(
"Exception:?%s\n")?,?szErrorMsg);
pEx
->Delete();
}


session.Close();
m_wFileID?
=?0;
if?(bRet)
{
if?(!::MoveFileEx(m_strTmpFileName,m_strSaveToFile,MOVEFILE_REPLACE_EXISTING)?)
{
Sleep(
1000);
::MoveFileEx(m_strTmpFileName,m_strSaveToFile,MOVEFILE_REPLACE_EXISTING);
}

}

return?bRet;
}


BOOL?CDownloadFile::GetHttpFile(CInternetSession?
&cSession)
{
BOOL?bRet?
=?FALSE;
CFile?m_TmpFile;
CFileException?fileException;

if?(?!m_TmpFile.Open?(m_strTmpFileName,?
CFile::modeCreate?
|?CFile::modeNoTruncate?|?CFile::modeReadWrite
|?CFile::shareDenyWrite?|?CFile::typeBinary,
&fileException?)?)
{
TRACE(?_T(
"Open?File?failed:?%d\n"),?fileException.m_cause?);
return?bRet;
}

CString?strRangeQuest;

if?(m_TmpFile.GetLength()>0)
{
PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_CURRENTSIZE,m_wFileID),m_TmpFile.GetLength());
m_TmpFile.SeekToEnd();
strRangeQuest.Format(?_T(
"%sRange:?bytes=%d-\r\n"),?szHeaders,m_TmpFile.GetLength());
}

else
strRangeQuest?
=?szHeaders;

DWORD?dwCount?
=?0;
CHttpFile
*?pFile?=?NULL;
CString?strTmpURL?
=?m_strFileURL;
try
{
DWORD?dwFlags?
=?INTERNET_FLAG_TRANSFER_BINARY?
|INTERNET_FLAG_DONT_CACHE
|INTERNET_FLAG_PRAGMA_NOCACHE
;
if?(m_bForceReload)?{
dwFlags?
|=?INTERNET_FLAG_RELOAD;
}

//Here?Find?URLFile?Redirect.
//?OpenRedirectHttpURL(strTmpURL,cSession);
pFile?=?(CHttpFile*)?cSession.OpenURL(strTmpURL,?1,?dwFlags,strRangeQuest,?-1);
}

catch?(CInternetException*?e)
{
TCHAR?szCause[MAX_PATH]?
=?{0};
e
->GetErrorMessage(szCause,?MAX_PATH);
e
->Delete();
delete?pFile;
pFile?
=?NULL;
return?bRet;
}


COleDateTime?startTime?
=?COleDateTime::GetCurrentTime();
DWORD?dwHttpFileSize?
=?0;
if?(pFile)
{
BYTE?buffer[BUFFER_SIZE
+1]?=?{0};
try?{
UINT?nRead?
=?0;
pFile
->QueryInfo(HTTP_QUERY_CONTENT_LENGTH?|?HTTP_QUERY_FLAG_NUMBER,dwHttpFileSize);
PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_FULLSIZE,m_wFileID),dwHttpFileSize);
TRACE(?_T(
"Totoal?Length?is?%d\n"),?dwHttpFileSize?);
dwCount?
=?0;
do
{
nRead?
=?pFile->Read(buffer,?BUFFER_SIZE);
if?(nRead?>?0)
{
buffer[nRead]?
=?0;
m_TmpFile.Write(buffer,nRead);

COleDateTimeSpan?elapsed?
=?COleDateTime::GetCurrentTime()?-?startTime;
double?dSecs?=?elapsed.GetTotalSeconds();
PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_DOWNSIZE,m_wFileID),dwCount);
if?(dSecs?>?0.0)
{
dwCount?
+=?nRead;
m_transferRate?
=?(float)?(?dwCount?/?1024.0?/?dSecs?);
TRACE(
"Read?%d?bytes?(%0.1f?Kb/s)\n",?dwCount,?m_transferRate?);
}

else
{
TRACE(
"Read?%d?bytes\n",?dwCount);
m_transferRate?
=?(float)?(?dwCount?/?1024.0?);
}

PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_DOWNSPEED,m_wFileID),(LPARAM)m_transferRate);
}

}

while?(nRead?>?0);
bRet?
=?TRUE;
}

catch?(CFileException?*e)
{
TCHAR?szCause[MAX_PATH]?
=?{0};
e
->GetErrorMessage(szCause,?MAX_PATH);
TRACE(
"ErrorMsg?:?%s\n",?szCause);
e
->Delete();
delete?pFile;
m_TmpFile.Close();
return?FALSE;
}

pFile
->QueryInfoStatusCode(m_infoStatusCode);?
pFile
->QueryInfo(HTTP_QUERY_RAW_HEADERS?,m_rawHeaders);
pFile
->Close();
m_TmpFile.Close();
delete?pFile;
}


return?bRet;
}


BOOL?CDownloadFile::OpenRedirectHttpURL(CString?
&strOldLocation,CInternetSession?&cSession)
{
BOOL?bRet?
=?FALSE;
CHttpFile?
*pFile?=?NULL;
CHttpConnection
*?pServer?=?NULL;
CString?strServerName,strObject;
INTERNET_PORT?nPort?
=?0;
DWORD?dwServiceType?
=?0;

if?(!AfxParseURL(strOldLocation,?dwServiceType,?strServerName,?strObject,?nPort)?||
dwServiceType?
!=?INTERNET_SERVICE_HTTP)
{
TRACE(?_T(
"Not?A?Http?Quest!\n")?);
return?bRet;
}


pServer?
=?cSession.GetHttpConnection(strServerName,?nPort);

pFile?
=?pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET,
strObject,?NULL,?
1,?NULL,?NULL,?
INTERNET_FLAG_EXISTING_CONNECT?
|?INTERNET_FLAG_NO_AUTO_REDIRECT);
pFile
->AddRequestHeaders(szHeaders);
pFile
->SendRequest();

DWORD?dwRet;
pFile
->QueryInfoStatusCode(dwRet);

//?if?access?was?denied,?prompt?the?user?for?the?password

if?(dwRet?==?HTTP_STATUS_DENIED)
{
DWORD?dwPrompt;
dwPrompt?
=?pFile->ErrorDlg(NULL,?ERROR_INTERNET_INCORRECT_PASSWORD,
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA?
|?FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,?NULL);

//?if?the?user?cancelled?the?dialog,?bail?out

if?(dwPrompt?!=?ERROR_INTERNET_FORCE_RETRY)
{
TRACE(?_T(
"Access?denied:?Invalid?password\n")?);
//?close?up?the?redirected?site

pFile
->Close();
delete?pFile;
pServer
->Close();
delete?pServer;

return?bRet;
}


pFile
->SendRequest();
pFile
->QueryInfoStatusCode(dwRet);
}


//?were?we?redirected?
//?these?response?status?codes?come?from?WININET.H

if?(dwRet?==?HTTP_STATUS_MOVED?||
dwRet?
==?HTTP_STATUS_REDIRECT?||
dwRet?
==?HTTP_STATUS_REDIRECT_METHOD)
{
CString?strNewLocation;
pFile
->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF,?strNewLocation);
int?nPlace?=?strNewLocation.Find(_T("Location:?"));
if?(nPlace?==?-1)
{
TRACE(?_T(
"Error:?Site?redirects?with?no?new?location\n")?);
//?close?up?the?redirected?site

pFile
->Close();
delete?pFile;
pServer
->Close();
delete?pServer;
return?bRet;
}
?
strNewLocation?
=?strNewLocation.Mid(nPlace?+?10);
nPlace?
=?strNewLocation.Find('\n');
if?(nPlace?>?0)
strNewLocation?
=?strNewLocation.Left(nPlace);
strOldLocation?
=?strNewLocation;
}

if?(?dwRet?==?HTTP_STATUS_OK?)
{
bRet?
=?TRUE;
}

//?close?up?the?redirected?site
pFile->Close();
delete?pFile;
pServer
->Close();
delete?pServer;

return?bRet;
}


BOOL?CDownloadFile::GetFtpFile(CInternetSession?
&cSession)
{
BOOL?bRet?
=?FALSE;
CFile?m_TmpFile;
CFileException?fileException;

if?(?!m_TmpFile.Open?(m_strTmpFileName,?
CFile::modeCreate?
|?CFile::modeNoTruncate?|?CFile::modeReadWrite
|?CFile::shareDenyWrite?|?CFile::typeBinary,
&fileException?)?)
{
TRACE(?_T(
"Open?File?failed:?%d\n"),?fileException.m_cause?);
return?bRet;
}


DWORD?dwCount?
=?0;
CFtpConnection?
*pFtpConn?=?NULL;
CInternetFile?
*pFile?=?NULL;
try
{
CString?strServerName,strObject,strUserName,strPassword;
INTERNET_PORT?nPort?
=?0;
DWORD?dwServiceType?
=?0;
CString?strRestPointCommand;

if?(!AfxParseURLEx(m_strFileURL,?dwServiceType,?strServerName,?strObject,?nPort,?
strUserName,?strPassword)?
||
dwServiceType?
!=?INTERNET_SERVICE_FTP)
{
TRACE(?_T(
"Not?A?Ftp?Quest!\n")?);
}

//?CFtpConnection?ERROR_INTERNET_NO_DIRECT_ACCESS?CInternetSession
if?(strUserName.IsEmpty())
pFtpConn?
=?cSession.GetFtpConnection(strServerName,NULL,NULL,nPort,m_bForceReload);
else
pFtpConn?
=?cSession.GetFtpConnection(strServerName,strUserName,strPassword,nPort,m_bForceReload);
if?(m_TmpFile.GetLength())
{
PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_CURRENTSIZE,m_wFileID),m_TmpFile.GetLength());
m_TmpFile.SeekToEnd();
strRestPointCommand.Format(?_T(
"REST?%d"),?m_TmpFile.GetLength());
//strRestPointCommand.Format(?_T("ls")?);
if?(?!FtpCommand((*pFtpConn),?FALSE,?FTP_TRANSFER_TYPE_ASCII,?
strRestPointCommand,?
0,?0)?)
{
TRACE(?_T(
"FtpCommand?failed,?error:?%d\n"),?GetLastError());
m_TmpFile.SeekToBegin();
}
?
}

if?(pFtpConn)
{
pFile?
=?pFtpConn->OpenFile(strObject);
}

}

catch?(CInternetException*?e)
{
TCHAR?szCause[MAX_PATH]?
=?{0};
e
->GetErrorMessage(szCause,?MAX_PATH);
e
->Delete();
delete?pFile;
delete?pFtpConn;
return?bRet;
}


COleDateTime?startTime?
=?COleDateTime::GetCurrentTime();
DWORD?dwFtpFileSize?
=?0;
if?(pFile)
{
BYTE?buffer[BUFFER_SIZE
+1]?=?{0};
try?{
UINT?nRead?
=?0;
dwFtpFileSize?
=?FtpGetFileSize(?(*pFile),0);
PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_FULLSIZE,m_wFileID),dwFtpFileSize);
TRACE(?_T(
"Totoal?Length?is?%d\n"),?dwFtpFileSize?);
dwCount?
=?0;
do
{
nRead?
=?pFile->Read(buffer,?BUFFER_SIZE);
if?(nRead?>?0)
{
buffer[nRead]?
=?0;
m_TmpFile.Write(buffer,nRead);

COleDateTimeSpan?elapsed?
=?COleDateTime::GetCurrentTime()?-?startTime;
double?dSecs?=?elapsed.GetTotalSeconds();
PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_DOWNSIZE,m_wFileID),dwCount);
if?(dSecs?>?0.0)
{
dwCount?
+=?nRead;
m_transferRate?
=?(float)(dwCount?/?1024.0?/?dSecs);
TRACE(
"Read?%d?bytes?(%0.1f?Kb/s)\n",?dwCount,?m_transferRate?);?
}

else
{
TRACE(
"Read?%d?bytes\n",?dwCount);
m_transferRate?
=?(float)(dwCount?/?1024.0);
}

PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_DOWNSPEED,m_wFileID),(LPARAM)m_transferRate);
}

}

while?(nRead?>?0);
bRet?
=?TRUE;
}

catch?(CFileException?*e)
{
TCHAR?szCause[MAX_PATH]?
=?{0};
e
->GetErrorMessage(szCause,?MAX_PATH);
TRACE(
"ErrorMsg?:?%s\n",?szCause);
e
->Delete();
delete?pFile;
pFtpConn
->Close();
delete?pFtpConn;
m_TmpFile.Close();
return?FALSE;
}

pFile
->Close();
delete?pFile;
m_TmpFile.Close();
pFtpConn
->Close();
delete?pFtpConn;
}

return?bRet;
}


BOOL?CDownloadFile::GetUNCFile()
{
BOOL?bRet?
=?FALSE;
CFile?m_TmpFile,m_SrcFile;
CFileException?fileException;
CString?strOldLocation?
=?m_strFileURL;
if?(?!m_TmpFile.Open?(m_strTmpFileName,?
CFile::modeCreate?
|?CFile::modeNoTruncate?|?CFile::modeReadWrite
|?CFile::shareDenyWrite?|?CFile::typeBinary,
&fileException?)?)
{
TRACE(?_T(
"Open?File?failed:?%d\n"),?fileException.m_cause?);
return?bRet;
}

strOldLocation.TrimLeft();
strOldLocation.TrimRight();
if(?StrCmpNI(strOldLocation,?_T("file:/"),6)?==?0?)
{
strOldLocation?
=?strOldLocation.Mid(8);
strOldLocation.Replace(?_T(
'/'),?_T('\\'));
}


if?(?!m_SrcFile.Open?(?strOldLocation,?
CFile::modeRead?
|?CFile::shareDenyWrite?|?CFile::typeBinary,
&fileException?)?)
{
TRACE(?_T(
"Open?File?failed:?%d\n"),?fileException.m_cause?);
return?bRet;
}

COleDateTime?startTime?
=?COleDateTime::GetCurrentTime();
DWORD?dwCount?
=?0;
try?{
if?(m_TmpFile.GetLength())
{
PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_CURRENTSIZE,m_wFileID),m_TmpFile.GetLength());
m_TmpFile.SeekToEnd();
m_SrcFile.Seek(m_TmpFile.GetLength(),?CFile::begin);
}

BYTE?buffer[BUFFER_SIZE
+1]?=?{0};
UINT?nRead?
=?0;
PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_FULLSIZE,m_wFileID),m_SrcFile.GetLength());
TRACE(?_T(
"Totoal?Length?is?%d,left?is?%d\n"),?m_SrcFile.GetLength()?,m_SrcFile.GetLength()?-?m_TmpFile.GetLength());
dwCount?
=?0;
do
{
nRead?
=?m_SrcFile.Read(buffer,?BUFFER_SIZE);
if?(nRead?>?0)
{
buffer[nRead]?
=?0;
m_TmpFile.Write(buffer,nRead);

COleDateTimeSpan?elapsed?
=?COleDateTime::GetCurrentTime()?-?startTime;
double?dSecs?=?elapsed.GetTotalSeconds();
PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_DOWNSIZE,m_wFileID),dwCount);
if?(dSecs?>?0.0)
{
dwCount?
+=?nRead;
m_transferRate?
=?(float)(dwCount?/?1024.0?/?dSecs);
TRACE(
"Read?%d?bytes?(%0.1f?Kb/s)\n",?dwCount,?m_transferRate?);?
}

else
{
TRACE(
"Read?%d?bytes\n",?dwCount);
m_transferRate?
=?(float)(dwCount?/?1024.0);
}

PostNotifyMessage(MAKEWPARAM(NOTIFY_MSG_LOW_WPARAM_DOWNSPEED,m_wFileID),(LPARAM)m_transferRate);
}

}

while?(nRead?>?0);
bRet?
=?TRUE;
}

catch?(CFileException?*e)
{
TCHAR?szCause[MAX_PATH]?
=?{0};
e
->GetErrorMessage(szCause,?MAX_PATH);
TRACE(
"ErrorMsg?:?%s\n",?szCause);
e
->Delete();
m_TmpFile.Close();
return?FALSE;
}

m_TmpFile.Close();
return?bRet;
}


void?CDownloadFile::RegisterNotifyWindow(DWORD?dwThreadID,HWND?hWnd,?DWORD?dwMsg)
{
m_dwThreadID?
=?dwThreadID;
m_hNotify?
=?hWnd;
m_dwMsgID?
=?dwMsg;
}


void?CDownloadFile::PostNotifyMessage(WPARAM?wParam,?LPARAM?lParam)
{
if?(m_hNotify)
{
::PostMessage(m_hNotify,?m_dwMsgID,?wParam,?lParam);
}

if?(?m_dwThreadID?)
{
::PostThreadMessage(m_dwThreadID,m_dwMsgID,?wParam,?lParam);
}

}


WORD?CDownloadFile::GenFileID()
{
srand(GetTickCount());
return?rand()?&?0xFFFF;
}

UINT?ThreadDownSingleFile(?LPVOID?pParam?)
{
CDownloadFile?m_DownFile;
UINT?uRet?
=?0;
if?(lpDownParam)
{
m_DownFile.m_wFileID?
=?m_DownFile.GenFileID();
//這里注冊通知窗口和消息
//m_DownFile.RegisterNotifyWindow
if?(?m_DownFile.DownLoadFile(m_Msg.lpFileSrc,?m_Msg.lpFileDst)?)
{
uRet?
=?1;
}

}

return?uRet;
}


posted on 2006-04-14 20:48 楊粼波 閱讀(910) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产人成精品一区二区三| 欧美亚洲成人网| 亚洲第一色中文字幕| 麻豆精品一区二区综合av | 亚洲免费观看高清完整版在线观看熊 | 伊人久久婷婷| 久久亚洲视频| 久久激情综合网| 亚洲精品欧美日韩| 在线一区二区三区四区五区| 国产欧美精品一区| 免费亚洲视频| 欧美三级中文字幕在线观看| 欧美在线观看www| 毛片一区二区三区| 亚洲影院高清在线| 久久久久久亚洲精品中文字幕| 免费在线看成人av| 亚洲一区二区日本| 久久久久久伊人| 亚洲视频免费| 久久一区二区三区av| 亚洲一级二级| 久久亚洲影院| 亚洲欧美第一页| 母乳一区在线观看| 欧美一区三区三区高中清蜜桃| 亚洲高清自拍| 欧美日韩一区二区欧美激情| 欧美影院精品一区| 欧美极品在线播放| 乱人伦精品视频在线观看| 欧美日韩亚洲一区二区三区在线 | 最近中文字幕日韩精品| 亚洲先锋成人| 亚洲日本免费| 小嫩嫩精品导航| 一区二区三区视频观看| 久久久精品国产免大香伊| 亚洲色图自拍| 欧美国产日本韩| 久久综合伊人77777蜜臀| 国产精品自在线| 99精品视频免费观看视频| 亚洲第一天堂av| 久久精品国产亚洲aⅴ| 亚洲欧美日韩国产另类专区| 欧美精品免费看| 亚洲大片精品永久免费| 激情综合在线| 久久激情五月丁香伊人| 久久超碰97人人做人人爱| 国产精品福利网站| 一本色道久久综合亚洲精品高清| 欧美日韩在线电影| 亚洲高清在线观看| 亚洲国产精品免费| 久久综合给合| 欧美激情aaaa| 亚洲国产婷婷| 欧美成人网在线| 欧美激情一级片一区二区| 精品成人乱色一区二区| 久久国产视频网| 免费成人av资源网| 亚洲高清电影| 欧美国产高清| 日韩图片一区| 亚洲砖区区免费| 国产精品一卡二卡| 午夜精品福利在线| 久久久亚洲综合| 亚洲国产精彩中文乱码av在线播放| 欧美激情综合色| 亚洲欧洲日韩综合二区| 欧美日本在线看| 亚洲视频999| 久久精品国产精品亚洲精品| 国产美女精品一区二区三区 | 亚洲美女网站| 欧美午夜精品久久久久久超碰| 香蕉视频成人在线观看| 国产精品尤物| 久久er99精品| 亚洲黄色影片| 亚洲欧美国产视频| 黄色亚洲在线| 欧美成人午夜剧场免费观看| 亚洲精品影视| 久久久久久久综合| 亚洲欧洲一区二区三区| 欧美日韩精品二区| 久久九九热免费视频| 亚洲人成绝费网站色www| 午夜精品免费| 亚洲国产日韩欧美综合久久 | 欧美激情在线免费观看| 亚洲特黄一级片| 国内一区二区三区在线视频| 欧美国产一区在线| 性欧美xxxx大乳国产app| 亚洲欧洲日产国码二区| 欧美在线关看| 亚洲午夜久久久| 国产农村妇女精品一二区| 欧美第一黄色网| 欧美一级视频| 一区二区三区国产盗摄| 免费欧美日韩国产三级电影| 亚洲视屏一区| 亚洲人成人一区二区三区| 国产精一区二区三区| 欧美片第1页综合| 久久亚洲风情| 香蕉久久夜色精品国产| 亚洲免费观看高清在线观看 | 国产欧美精品一区| 欧美激情一区二区三区成人| 亚洲中字在线| 一本色道88久久加勒比精品| 欧美高清影院| 久久天天躁狠狠躁夜夜爽蜜月| 国产网站欧美日韩免费精品在线观看 | 亚洲第一精品在线| 久久久综合网站| 亚洲欧美日韩成人高清在线一区| 欧美日韩在线观看一区二区三区| 欧美国产免费| 久久乐国产精品| 欧美呦呦网站| 欧美怡红院视频一区二区三区| 国产麻豆精品theporn| 欧美日韩亚洲视频| 欧美日韩国产综合视频在线| 欧美国产日韩一区二区三区| 久久精品国产免费观看| 欧美中文在线字幕| 久久精品国产v日韩v亚洲| 午夜精品久久久久久99热软件| 久久九九99| 久久久国产午夜精品| 久久久久亚洲综合| 美女精品自拍一二三四| 蜜臀av性久久久久蜜臀aⅴ| 老司机精品视频网站| 久久久久国产精品www| 久久久久九九视频| 美日韩精品视频免费看| 欧美jjzz| 亚洲精品久久久久中文字幕欢迎你 | 亚洲国产精品成人综合| 精品动漫3d一区二区三区免费| 看片网站欧美日韩| 免费观看一级特黄欧美大片| 欧美成人精品影院| 欧美日韩成人免费| 国产精品久久久久9999高清| 国产日产欧美一区| 在线观看日韩精品| 99成人精品| 性一交一乱一区二区洋洋av| 久久久精品国产一区二区三区| 亚洲国产精品久久久久秋霞影院| 欧美日韩亚洲一区二区| 国产精品久久久一区二区| 国产日韩欧美一区在线| 揄拍成人国产精品视频| 日韩一区二区久久| 午夜日韩在线| 欧美成人午夜剧场免费观看| 日韩视频免费观看| 久久国产精品久久久久久久久久| 亚洲精品一区二区三区樱花 | 亚洲无吗在线| 欧美在线视频导航| 欧美韩日视频| 亚洲一区二区三区高清| 久久亚洲精品欧美| 国产精品久久久久久久第一福利| 欧美aⅴ一区二区三区视频| 欧美激情1区2区| 国产乱肥老妇国产一区二| 亚洲欧洲精品一区二区精品久久久| 国内外成人免费激情在线视频| 欧美日韩国内自拍| 国产亚洲人成a一在线v站| 亚洲国产黄色片| 性欧美超级视频| 亚洲国产欧美日韩| 欧美中文在线字幕| 国产精品日韩精品| 亚洲精品少妇30p| 久久视频一区| 亚洲伊人久久综合| 欧美精品videossex性护士| 极品尤物久久久av免费看| 性欧美精品高清| 99视频精品全部免费在线| 免费亚洲电影| 亚洲国产成人在线|