亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? downloadftp.cpp

?? ◆◆◆ 《FTP、HTTP 多線程斷點(diǎn)續(xù)傳下載文件》◆◆◆ FlashGet、網(wǎng)絡(luò)螞蟻想必大家都很熟悉
?? CPP
字號(hào):
// DownloadFtp.cpp: implementation of the CDownloadFtp class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "NetDownMTR.h"
#include "DownloadFtp.h"

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

void DownloadNotify ( int nIndex, UINT nNotityType, LPVOID lpNotifyData, LPVOID pDownloadMTR );

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDownloadFtp::CDownloadFtp()
{
}

CDownloadFtp::~CDownloadFtp()
{
}

//
// 創(chuàng)建一個(gè) FTP 的數(shù)據(jù)通道連接
//
BOOL CDownloadFtp::CreateFTPDataConnect(CSocketClient &SocketClient)
{
	ASSERT ( SocketClient.m_hSocket == INVALID_SOCKET );
	// 設(shè)被動(dòng)模式
	if ( !m_SocketClient.SendString ( "PASV\r\n" ) ) return FALSE;
	CString csResponseStr;
	if ( !m_SocketClient.GetResponse ( 227, &csResponseStr ) )
		return FALSE;
	CString csPasvIP;
	USHORT uPasvPort = 0;
	if ( !m_SocketClient.GetIPAndPortByPasvString ( csResponseStr, csPasvIP, uPasvPort ) )
		return FALSE;

	// 創(chuàng)建數(shù)據(jù)通道連接
	if ( !SocketClient.Connect ( csPasvIP, uPasvPort ) )
		return FALSE;

	return TRUE;
}

//
// 連接需要下載的服務(wù)器
//
BOOL CDownloadFtp::Connect ()
{
	if ( !CDownloadPub::Connect () )
		return FALSE;

	int nResponseCode = m_SocketClient.GetResponse ();
	if ( nResponseCode != 220 )
	{
		Log ( L_WARNING, "Connect to [%s:%u] failed", m_csServer, m_nPort );
	}

	// 登錄
	if ( m_csUsername.IsEmpty () )
		m_csUsername = "anonymous";
	if ( !m_SocketClient.SendString ( "USER %s\r\n", m_csUsername ) ) return FALSE;
	nResponseCode = m_SocketClient.GetResponse ();
	// 需要密碼
	if ( nResponseCode == 331 )
	{
		if ( !m_SocketClient.SendString ( "PASS %s\r\n", m_csPassword ) ) return FALSE;
		nResponseCode = m_SocketClient.GetResponse ();
	}

	// 登錄失敗
	if ( nResponseCode != 230 )
	{
		Log ( L_ERROR, "Login failed" );
		return FALSE;
	}

	return TRUE;
}

BOOL CDownloadFtp::DownloadOnce()
{
	// 不需要下載了
	int nWillDownloadSize = Get_WillDownloadSize();				// 本次應(yīng)該下載的字節(jié)數(shù)
	int nDownloadedSize = Get_DownloadedSize ();				// 已下載字節(jié)數(shù)
	if ( nWillDownloadSize > 0 && nDownloadedSize >= nWillDownloadSize )
		return DownloadEnd(TRUE);

	if ( !CDownloadPub::DownloadOnce () )
		return DownloadEnd(FALSE);
	
	// 設(shè)置接收數(shù)據(jù)類(lèi)型為 二進(jìn)制模式
	if ( !m_SocketClient.SendString ( "TYPE I\r\n" ) )
		return DownloadEnd(FALSE);
	if ( !m_SocketClient.GetResponse ( 200 ) )
		return DownloadEnd(FALSE);
	SLEEP_RETURN_Down ( 0 );

	// 創(chuàng)建數(shù)據(jù)通道連接
	CSocketClient SocketClient;
	if ( !CreateFTPDataConnect ( SocketClient ) )
		return DownloadEnd(FALSE);
	SLEEP_RETURN_Down ( 0 );
	
	// 設(shè)定下載文件的起始位置
	int nWillDownloadStartPos = Get_WillDownloadStartPos ();	// 開(kāi)始位置
	if ( !m_SocketClient.SendString ( "REST %d\r\n", nWillDownloadStartPos+nDownloadedSize ) )
		return DownloadEnd(FALSE);
	if ( !m_SocketClient.GetResponse ( 350 ) )
		return DownloadEnd(FALSE);

	// 提交下載文件的請(qǐng)求
	if ( !m_SocketClient.SendString ( "RETR %s\r\n", m_csObject ) )
		return DownloadEnd(FALSE);
	if ( !m_SocketClient.GetResponse ( 150 ) )
		return DownloadEnd(FALSE);
	SLEEP_RETURN_Down ( 0 );

	// 從數(shù)據(jù)通道讀取數(shù)據(jù),并保存到文件中
	BOOL bRet = RecvDataAndSaveToFile(SocketClient);
	SocketClient.Disconnect ();
	return DownloadEnd ( bRet );

}

//
// 獲取遠(yuǎn)程站點(diǎn)信息,如:是否支持?jǐn)帱c(diǎn)續(xù)傳、要下載的文件大小和創(chuàng)建時(shí)間等
//
BOOL CDownloadFtp::GetRemoteSiteInfo()
{
	BOOL bRet = FALSE;
	CSocketClient SocketClient;
	CString csReadData;
	char szRecvBuf[NET_BUFFER_SIZE] = {0};
	int nReadSize = 0;
	CString csOneLine;
	int i;

	if ( !CDownloadPub::GetRemoteSiteInfo() )
		goto Finished;

	if ( !m_SocketClient.Is_Connected () && !Connect () )
		goto Finished;

	// 設(shè)置接收數(shù)據(jù)類(lèi)型為 ASCII
	if ( !m_SocketClient.SendString ( "TYPE A\r\n" ) ) goto Finished;
	if ( !m_SocketClient.GetResponse ( 200 ) )
		goto Finished;
	SLEEP_RETURN ( 0 );
	
	// 判斷是否支持?jǐn)帱c(diǎn)續(xù)傳
	if ( !m_SocketClient.SendString ( "REST 1\r\n" ) ) goto Finished;
	m_bSupportResume = ( m_SocketClient.GetResponse () == 350 );
	TRACE ( "是否支持?jǐn)帱c(diǎn)續(xù)傳:%s\n", m_bSupportResume ? "支持":"不支持" );
	if ( m_bSupportResume )
	{
		if ( !m_SocketClient.SendString ( "REST 0\r\n" ) ) goto Finished;
		VERIFY ( m_SocketClient.GetResponse ( 350 ) );
	}
	SLEEP_RETURN ( 0 );

	// 創(chuàng)建數(shù)據(jù)通道連接
	if ( !CreateFTPDataConnect ( SocketClient ) )
		goto Finished;
	// 發(fā)送列舉文件命令
	if ( !m_SocketClient.SendString ( "LIST %s\r\n", m_csObject ) )
		goto Finished;
	if ( !m_SocketClient.GetResponse ( 150 ) )
		goto Finished;
	SLEEP_RETURN ( 0 );
	
	// 從數(shù)據(jù)通道讀取文件列表信息,直到命令通道返回 "226" 回應(yīng)碼,注意:這里接收數(shù)據(jù)用非阻塞型的。
	for ( i=0; ;i++ )
	{
		memset ( szRecvBuf, 0, sizeof(szRecvBuf) );
		nReadSize = SocketClient.Receive ( szRecvBuf, sizeof(szRecvBuf), FALSE );
		if ( nReadSize < 0 )
		{
			Log ( L_WARNING, "Receive file list info failed" );
			break;
		}
		csReadData += szRecvBuf;
		int nResponseCode = m_SocketClient.GetResponse ( (CString*)NULL, FALSE );
		if ( nResponseCode == -1 ) goto Finished;
		else if ( nResponseCode == 0 )
		{
			SLEEP_RETURN ( 100 );
		}
		else if ( nResponseCode == 226 )
		{
			break;
		}
		else goto Finished;
		SLEEP_RETURN ( 0 );
	}

	for ( i=0; !csReadData.IsEmpty() ; i++ )
	{
		csOneLine = GetOneLine ( csReadData );
		if ( !csOneLine.IsEmpty() )
		{
			ParseFileInfoStr ( csOneLine );
		}
	}
	bRet = TRUE;

Finished:
	m_SocketClient.Disconnect ();
	return bRet;
}

//
// 從 "-rw-rw-rw-   1 user     group    37979686 Mar  9 13:39 FTP-Callgle 1.4.0_20060309.cab" 字符串中分析
// 出文件信息
//
void CDownloadFtp::ParseFileInfoStr(CString &csFileInfoStr)
{
	csFileInfoStr.TrimLeft (); csFileInfoStr.TrimRight ();
	if ( csFileInfoStr.IsEmpty() ) return;
	BOOL bLastCharIsSpace = ( csFileInfoStr[0]==' ' );
	int nSpaceCount = 0;
	CString csFileTime1, csFileTime2, csFileTime3;
	CString csNodeStr;
	CString csFileName;
	for ( int i=0; i<csFileInfoStr.GetLength(); i++ )
	{
		if ( csFileInfoStr[i]==' ' )
		{
			if ( !bLastCharIsSpace )
			{
				csNodeStr = csFileInfoStr.Mid ( i );
				csNodeStr.TrimLeft (); csNodeStr.TrimRight ();
				nSpaceCount ++;
				int nFindPos = csNodeStr.Find ( " ", 0 );
				if ( nFindPos < 0 ) nFindPos = csNodeStr.GetLength() - 1;
				csNodeStr = csNodeStr.Left ( nFindPos );
				// 文件大小
				if ( nSpaceCount == 4 )
				{
					if ( m_nIndex == -1 )	// 主線程才需要獲取文件大小的信息
					{
						m_nFileTotalSize = (int)atoi(csNodeStr);
						DownloadNotify ( m_nIndex, NOTIFY_TYPE_GOT_REMOTE_FILESIZE, (LPVOID)m_nFileTotalSize, m_pDownloadMTR );
						int nWillDownloadStartPos = Get_WillDownloadStartPos ();	// 開(kāi)始位置
						int nWillDownloadSize = Get_WillDownloadSize();				// 本次應(yīng)該下載的字節(jié)數(shù)
						int nDownloadedSize = Get_DownloadedSize ();				// 已下載字節(jié)數(shù)
						if ( m_nFileTotalSize > 0 && nWillDownloadSize-nDownloadedSize > m_nFileTotalSize )
							Set_WillDownloadSize ( m_nFileTotalSize-nDownloadedSize );
					}
				}
				// 文件時(shí)間第一節(jié)
				else if ( nSpaceCount == 5 )
				{
					csFileTime1 = csNodeStr;
				}
				// 文件時(shí)間第二節(jié)
				else if ( nSpaceCount == 6 )
				{
					csFileTime2 = csNodeStr;
				}
				// 文件時(shí)間第三節(jié)
				else if ( nSpaceCount == 7 )
				{
					csFileTime3 = csNodeStr;
				}
				else if ( nSpaceCount > 7 )
				{
					csFileName = csFileInfoStr.Mid ( i );
					csFileName.TrimLeft(); csFileName.TrimRight();
					break;
				}
			}
			bLastCharIsSpace = TRUE;
		}
		else
		{
			bLastCharIsSpace = FALSE;
		}
	}

	GetFileTimeInfo ( csFileTime1, csFileTime2, csFileTime3 );
}

void CDownloadFtp::GetFileTimeInfo(CString csFileTime1, CString csFileTime2, CString csFileTime3)
{
	if ( csFileTime3.IsEmpty() ) return;
	CString csYear, csMonth, csDay, csHour, csMinute, csSecond;
	int nMonth = GetMouthByShortStr ( csFileTime1 );
	ASSERT ( nMonth >= 1 && nMonth <= 12 );
	csMonth.Format ( "%02d", nMonth );

	COleDateTime tOleNow = COleDateTime::GetCurrentTime ();
	csDay.Format ( "%02d", atoi(csFileTime2) );
	csSecond = "00";
	// 帶年的日期,如:Aug 21 2006
	if ( csFileTime3.Find ( ":", 0 ) < 0 )
	{
		csYear = csFileTime3;
		csHour = "00";
		csMinute = "00";
	}
	// 不帶年的日期,如:Feb 21 01:11
	else
	{
		csYear.Format ( "%04d", tOleNow.GetYear() );
		int nPos = csFileTime3.Find ( ":", 0 );
		if ( nPos < 0 ) nPos = csFileTime3.GetLength() - 1;
		csHour = csFileTime3.Left ( nPos );
		csMinute = csFileTime3.Mid ( nPos+1 );
	}

	CString csFileTimeInfo;
	csFileTimeInfo.Format ( "%s-%s-%s %s:%s:%s", csYear, csMonth, csDay, csHour, csMinute, csSecond );
	ConvertStrToCTime ( csFileTimeInfo.GetBuffer(0), m_TimeLastModified );
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品一区二区三区蜜桃| 欧美精品在线视频| 五月激情六月综合| 国产午夜三级一区二区三| 欧美人与性动xxxx| aaa欧美色吧激情视频| 另类成人小视频在线| 亚洲一区二区视频在线| 中文字幕电影一区| 精品久久久久久亚洲综合网| 欧美日韩亚洲国产综合| 成人午夜av在线| 久久精品国产色蜜蜜麻豆| 亚洲一区二区综合| 亚洲视频一区二区在线| 久久先锋资源网| 欧美精品九九99久久| 91美女福利视频| 成人av在线一区二区| 国产在线日韩欧美| 美腿丝袜亚洲三区| 亚洲综合色自拍一区| 中文字幕一区av| 亚洲国产精品v| 久久精品视频免费观看| 91精品国产一区二区三区香蕉 | 亚洲图片有声小说| ...中文天堂在线一区| 国产欧美精品国产国产专区| 日韩精品一区二区三区四区视频| 欧美精品xxxxbbbb| 欧美日韩一区二区三区高清| 91久久香蕉国产日韩欧美9色| 91香蕉视频mp4| 成人v精品蜜桃久久一区| 国产成人自拍在线| 国产一区视频在线看| 极品美女销魂一区二区三区| 欧美a一区二区| 青青草97国产精品免费观看无弹窗版| 亚洲电影一级黄| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲综合激情网| 一区二区三区免费看视频| 综合激情网...| 亚洲免费av观看| 亚洲色图.com| 一片黄亚洲嫩模| 夜夜操天天操亚洲| 午夜不卡在线视频| 免费高清成人在线| 国产美女娇喘av呻吟久久| 国产一区在线精品| 暴力调教一区二区三区| 色婷婷综合久久久久中文 | 国产亚洲欧洲一区高清在线观看| 日韩美女天天操| 久久久99免费| 亚洲欧洲另类国产综合| 一区二区在线观看视频在线观看| 亚洲五码中文字幕| 老司机精品视频导航| 国产风韵犹存在线视精品| www.欧美日韩| 欧美日韩高清在线播放| 精品美女一区二区| 国产精品美女久久久久aⅴ| 亚洲精品亚洲人成人网在线播放| 亚洲一区二区在线视频| 久久99久国产精品黄毛片色诱| 国产精品一区二区在线观看不卡| 99久久精品国产精品久久| 欧美日韩夫妻久久| 久久久亚洲午夜电影| 亚洲人午夜精品天堂一二香蕉| 亚洲图片欧美色图| 国产精品一区2区| 色成年激情久久综合| 欧美一区二区三区婷婷月色| 久久久噜噜噜久久中文字幕色伊伊| 亚洲欧洲精品天堂一级| 日本欧美韩国一区三区| 成人激情av网| 日韩欧美中文一区二区| 国产精品久久久久久久久免费樱桃 | 91精品国产一区二区三区香蕉| 久久久精品天堂| 亚洲综合男人的天堂| 精品影院一区二区久久久| 91麻豆免费观看| 日韩欧美一二三四区| 亚洲色大成网站www久久九九| 美女久久久精品| 色婷婷综合久久| 精品国产3级a| 亚洲大尺度视频在线观看| 高清av一区二区| 欧美一级夜夜爽| 一区二区高清免费观看影视大全| 国产乱人伦偷精品视频免下载 | 风间由美中文字幕在线看视频国产欧美| 91福利在线观看| 欧美激情一区三区| 免费成人结看片| 在线观看欧美黄色| 国产精品久久久久久久久动漫| 日本欧美大码aⅴ在线播放| 91麻豆高清视频| 国产午夜精品美女毛片视频| 午夜精品视频一区| 91捆绑美女网站| 欧美国产1区2区| 激情综合色综合久久综合| 91麻豆精品国产综合久久久久久| 亚洲欧美日韩久久| 成人午夜精品一区二区三区| 久久久久亚洲蜜桃| 久久综合综合久久综合| 欧美一区二区福利视频| 亚洲3atv精品一区二区三区| 色综合咪咪久久| 亚洲视频一区在线| 波多野结衣中文一区| 欧美高清在线一区二区| 国产精品888| 精品国产乱码久久久久久闺蜜| 日韩高清不卡一区二区三区| 欧美色图在线观看| 亚洲一区二区精品久久av| 91国偷自产一区二区开放时间| 亚洲欧美综合网| www.亚洲免费av| 一色屋精品亚洲香蕉网站| 成人性生交大片免费看中文 | 亚洲欧洲制服丝袜| 99久久夜色精品国产网站| 亚洲欧洲精品一区二区三区不卡 | 欧美日韩国产天堂| 亚洲一区二区在线播放相泽 | 精品国精品自拍自在线| 激情五月播播久久久精品| 久久一区二区三区四区| 国产精品一区专区| 久久久久久免费网| 成人丝袜高跟foot| 亚洲美女在线一区| 在线这里只有精品| 视频一区二区三区在线| 91精品国产色综合久久不卡蜜臀| 日韩和欧美一区二区| 91精品国产综合久久精品图片 | 福利电影一区二区三区| 国产精品乱码一区二三区小蝌蚪| av高清久久久| 亚洲影院在线观看| 7777精品伊人久久久大香线蕉完整版| 日韩精品免费专区| 久久夜色精品一区| 99国产精品久久久久| 亚洲成av人片在线观看无码| 欧美一区二区三区四区五区| 国内不卡的二区三区中文字幕| 国产亚洲精品7777| 91视频免费观看| 午夜不卡av免费| 久久精品亚洲麻豆av一区二区 | 欧美日韩亚洲另类| 国产真实乱对白精彩久久| 综合色天天鬼久久鬼色| 欧美日韩五月天| 国内精品伊人久久久久av影院| 国产精品国产馆在线真实露脸| 欧美亚洲综合色| 国产一区二区美女诱惑| 亚洲日本一区二区三区| 91精品国产欧美一区二区| 成人久久视频在线观看| 午夜精品在线看| 亚洲国产成人私人影院tom| 欧美色图片你懂的| 国产一区欧美二区| 亚洲一区在线观看免费观看电影高清| 日韩欧美一卡二卡| 色一情一伦一子一伦一区| 美女视频黄 久久| 成人免费一区二区三区视频| 91精品国产黑色紧身裤美女| 成人午夜大片免费观看| 蜜桃精品在线观看| ...av二区三区久久精品| 精品国产三级电影在线观看| 色婷婷精品久久二区二区蜜臂av| 黑人巨大精品欧美黑白配亚洲| 一区二区三区在线看| 国产午夜精品一区二区三区嫩草 | 国产精品网站在线观看| 在线综合视频播放| 日本道色综合久久| 国产美女精品人人做人人爽| 日韩在线播放一区二区|