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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ftpclient.cpp

?? 一個用vc寫的ftp軟件
?? CPP
字號:
// FTPClient.cpp: implementation of the CFTPClient class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "FtpDownload.h"
#include "FTPClient.h"
#include "ftpdownloaddlg.h"
#include "ftpsocket.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#define SAFEDELTE(x) if(x!=NULL){delete x;x = NULL;}

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

CFTPClient::CFTPClient(CFtpDownloadDlg *pDoc)
{
	m_pCtrlRxarch = NULL;
	m_pCtrlTxarch = NULL;
	m_pCtrlsokfile = NULL;
	m_Ctrlsok = NULL;
	m_pDoc = pDoc;
}

CFTPClient::~CFTPClient()
{
	SAFEDELTE(m_pCtrlRxarch);
	SAFEDELTE(m_pCtrlTxarch);
	SAFEDELTE(m_pCtrlsokfile);
	SAFEDELTE(m_Ctrlsok);
}

void CFTPClient::Receive()
{

}

BOOL CFTPClient::Logon(CString hostname, int hostport, CString username, CString password)//, CString acct, CString fwhost, CString fwusername, CString fwpassword, int fwport, int logontype)
{
//	if(m_dlgMsg.m_hWnd == NULL){
//		m_dlgMsg.Create(AfxGetMainWnd());
//	}
//	else
//		m_dlgMsg.ShowWindow(SW_SHOW);
	int port,logonpoint=0;
	const int LO=-2, ER=-1;
	CString buf,temp;
	const int NUMLOGIN=9; // currently supports 9 different login sequences
	int logonseq[100] = {0,LO,3, 1,LO,6, 2,LO,ER};		
		// this array stores all of the logon sequences for the various firewalls 
		// in blocks of 3 nums. 1st num is command to send, 2nd num is next point in logon sequence array
		// if 200 series response is rec'd from server as the result of the command, 3rd num is next
		// point in logon sequence if 300 series rec'd
							// no firewall
	temp=hostname;
		port=hostport;

	if(hostport!=21) 
		hostname.Format(hostname+":%d",hostport); // add port to hostname (only if port is not 21)
	if(!ConnectRemote(temp,port)) 
		return false;
	if(!FTPcommand("")) 
		return FALSE;		// get initial connect msg off server
	// go through appropriate logon procedure
	while(1) {
		switch(logonseq[logonpoint]) {
		case 0:
			temp="USER "+username;
			break;
		case 1:
			temp="PASS "+password;
			break;
	//	case 2:
	//		temp="ACCT "+acct;
	//		break;
	//	case 3:
	//		temp="USER "+fwusername;
	//		break;
	//	case 4:
	//		temp="PASS "+fwpassword;
	//		break;
	//	case 5:
	//		temp="SITE "+hostname;
	//		break;
	//	case 6:
	//		temp="USER "+username+"@"+hostname;
	//		break;
	//	case 7:
	//		temp="OPEN "+hostname;
	//		break;
	//	case 8:
	//		temp="USER "+fwusername+"@"+hostname;
	//		break;
	//	case 9:
	//		temp="USER "+username+"@"+hostname+" "+fwusername;
	//		break;
	//	case 10:
	//		temp="USER "+username+"@"+fwusername+"@"+hostname;
//			break;
	//	case 11:
	//		temp="PASS "+password+"@"+fwpassword;
//			break;
		}
		// send command, get response
		if(!WriteStr(temp))
			return FALSE;
		if(!ReadStr()) 
			return FALSE;
		// only these responses are valid
		if(m_fc!=2 && m_fc!=3) 
			return FALSE;
		logonpoint=logonseq[logonpoint+m_fc-1]; //get next command from array
	
	
		switch(logonpoint) {
		case ER: // ER means summat has gone wrong
			m_retmsg.LoadString(IDS_FTPMSG1);
			return FALSE;
		case LO: // LO means we're fully logged on
			return TRUE;
		}
	}
	
}

BOOL CFTPClient::ConnectRemote(CString serverhost, int serverport)
{
	SAFEDELTE(m_pCtrlRxarch);
	SAFEDELTE(m_pCtrlTxarch);
	SAFEDELTE(m_pCtrlsokfile);
	SAFEDELTE(m_Ctrlsok);
   if(m_Ctrlsok == NULL)
	
		m_Ctrlsok = new CFTPSocket;
		
	if( !(m_Ctrlsok->Create()))
	return FALSE;
	if(!(m_Ctrlsok->Connect(serverhost,serverport))) 
		return FALSE;
	if(!(m_pCtrlsokfile=new CSocketFile(m_Ctrlsok))) 
		return FALSE;
	if(!(m_pCtrlRxarch=new CArchive(m_pCtrlsokfile,CArchive::load))) 
		return FALSE;
	if(!(m_pCtrlTxarch=new CArchive(m_pCtrlsokfile,CArchive::store)))
		return FALSE;
	return TRUE;
}

BOOL CFTPClient::WriteStr(CString outputstring)
{
	TRY {
		m_pCtrlTxarch->WriteString(outputstring+"\r\n");
		m_pCtrlTxarch->Flush();
	}
	CATCH(CException,e) {
		return FALSE;
	}
	END_CATCH
	return TRUE;
}

int CFTPClient::ReadStr()
{
	int retcode;

	if(!ReadStr2())
		return FALSE;
	if(m_retmsg.GetLength() < 4 || m_retmsg.GetAt(3) != '-') 
		return TRUE;
//AfxMessageBox(m_retmsg);
	retcode=atol(m_retmsg);
	
	while(1) { //handle multi-line server responses
		if(m_retmsg.GetLength() > 3 && (m_retmsg.GetAt(3) == ' ' 
			&& atol(m_retmsg) == retcode)) 
			return TRUE;
		if(!ReadStr2()) return FALSE;
	}
}

BOOL CFTPClient::ReadStr2()
{
	TRY {
		if(!m_pCtrlRxarch->ReadString(m_retmsg)) {
			return FALSE;
		}
	}
	CATCH(CException,e) {
		return FALSE;
	}
	END_CATCH
	if(m_retmsg.GetLength() > 0)
		m_fc = m_retmsg.GetAt(0)-48; 
//	m_dlgMsg.TextOut(m_retmsg);
	// get 1st digit of the return code (indicates primary result)
	return TRUE;
}

BOOL CFTPClient::FTPcommand(CString command)
{
	if(command != "" && !WriteStr(command))
		return FALSE;
	if((!ReadStr()) || (m_fc != 2)) 
		return FALSE;
	return TRUE;
}

BOOL CFTPClient::List()
{
	CString lhost,temp,rhost;
	UINT localsock,i;
	CFile datafile;
	CSocket sockSrvr;
	CAsyncSocket datachannel;
	int num, sum;
	const int BUFSIZE = 4096;
	DWORD lpArgument=0;
	
	m_buf.RemoveAll();
	m_buf.SetSize(BUFSIZE);
	if(!FTPcommand("TYPE I")) 
		return FALSE; // request BINARY mode

	m_retmsg.LoadString(IDS_FTPMSG6);
	// get the local IP address off the control channel socket
	if(!m_Ctrlsok->GetSockName(lhost,localsock)) 
		return FALSE;;
	while(1) {
		// convert returned '.' in ip address to ','
		if((i=lhost.Find("."))==-1) break;
		lhost.SetAt(i,',');
	}
	// create listen socket (let MFC choose the port) & start the socket listening
	if((!sockSrvr.Create(0, SOCK_STREAM, NULL))
			|| (!sockSrvr.Listen()))
		return FALSE;
	if(!sockSrvr.GetSockName(temp,localsock))
		return FALSE;// get the port that MFC chose
	// convert the port number to 2 bytes + add to the local IP
	lhost.Format(lhost+",%d,%d", localsock / 256, localsock % 256);
	if(!FTPcommand("PORT "+lhost)) 
		return FALSE;// send PORT cmd to server

	if(!WriteStr("LIST") )
		return FALSE;
	if(!ReadStr())
		return FALSE; // get response to RETR/STOR command
	if(!sockSrvr.Accept(datachannel)) 
		return FALSE; // if !PASV accept inbound data connection from server
	// we're connected & ready to do the data transfer, so set blocking mode on data channel socket
	if((!datachannel.AsyncSelect(0)) || 
		(!datachannel.IOCtl(FIONBIO,&lpArgument))) {
		m_retmsg.LoadString(IDS_FTPMSG6);
		return FALSE;
	}
	sum = 0;
	while(1) { // move data from/to server
		TRY {
			if(!(num = datachannel.Receive(m_buf.GetData() + sum, BUFSIZE, 0)) 
				|| num == SOCKET_ERROR)
				break; // (EOF||network error)
			TRACE("Received :%d\n", num);
			Sleep(0);
			sum += num;
			m_buf.SetSize(sum + BUFSIZE);
		}
		CATCH (CException,e) {
			m_retmsg.LoadString(IDS_FTPMSG5);
			return FALSE;
		}
		END_CATCH
	}
	datachannel.Close();
	ProcessList();
	if(!FTPcommand("")) 
		return FALSE; // check transfer outcome msg from server
	return TRUE; // oh goody it worked.
}

void CFTPClient::ProcessList()
{
	
	int ndx = 0;
	while(GetLine(ndx))
	{

		(m_pDoc->m_ListFile).AddString(m_strLine);
	}
}

BOOL CFTPClient::GetLine(int& ndx)
{
	m_strLine.Empty();
	int nBytes = m_buf.GetSize();
	BOOL bLine = FALSE;
	while ( bLine == FALSE && ndx < nBytes )
	{
		char ch = (char)(m_buf.GetAt( ndx ));
		switch( ch )
		{
		case '\n': // end-of-line
			bLine = TRUE;
			break;
		default:   // other....
			m_strLine += ch;
			break;
		}
		++ndx;
	}
	m_strLine = m_strLine.Left(m_strLine.GetLength() - 1);
	return bLine;
}

BOOL CFTPClient::MoveFile(CString remotefile, CString localfile, BOOL get, BOOL pasv)
{
	CString lhost,temp,rhost;
	UINT localsock,serversock,i,j;
	CFile datafile;
	CSocket sockSrvr;
	CAsyncSocket datachannel;
	int num,numread,numsent;
	const int BUFSIZE=4096;
	char cbuf[BUFSIZE];
	DWORD lpArgument=0;
	
	// open local file
	if(!datafile.Open(localfile,(get ? CFile::modeWrite | CFile::modeCreate : CFile::modeRead))) {
		m_retmsg.LoadString(IDS_FTPMSG4);
		return FALSE;
	}
	if(!FTPcommand("TYPE I")) 
		return FALSE; // request BINARY mode
	if(pasv) { // set up a PASSIVE type file transfer
		if(!FTPcommand("PASV"))
			return FALSE;
		// extract connect port number and IP from string returned by server
		if((i=m_retmsg.Find("("))==-1 || 
			(j=m_retmsg.Find(")"))==-1)
			return FALSE;
		temp = m_retmsg.Mid(i+1,(j-i)-1);
		i=temp.ReverseFind(',');
		serversock=atol(temp.Right(temp.GetLength()-(i+1))); //get ls byte of server socket
		temp=temp.Left(i);
		i=temp.ReverseFind(',');
		serversock += 256*atol(temp.Right(temp.GetLength()-(i+1))); // add ms byte to server socket
		rhost=temp.Left(i);
		while(1) { // convert commas to dots in IP
			if((i=rhost.Find(","))==-1) 
				break;
			rhost.SetAt(i,'.');
		}
	}
	else { // set up a ACTIVE type file transfer
		m_retmsg.LoadString(IDS_FTPMSG6);
		// get the local IP address off the control channel socket
		if(!m_Ctrlsok->GetSockName(lhost,localsock))
			return FALSE;;
		while(1) { // convert returned '.' in ip address to ','
			if((i=lhost.Find("."))==-1)
				break;
			lhost.SetAt(i,',');
		}
		// create listen socket (let MFC choose the port) & start the socket listening
		if((!sockSrvr.Create(0,SOCK_STREAM,NULL)) || 
			(!sockSrvr.Listen()))
			return FALSE;
		if(!sockSrvr.GetSockName(temp,localsock)) 
			return FALSE;// get the port that MFC chose
		// convert the port number to 2 bytes + add to the local IP
		lhost.Format(lhost+",%d,%d",localsock/256,localsock%256);
		if(!FTPcommand("PORT "+lhost))
			return FALSE;// send PORT cmd to server
	}
	// send RETR/STOR command to server
	if(!WriteStr(( get ? "RETR " : "STOR ") + remotefile)) 
		return FALSE;
	if(pasv) {// if PASV create the socket & initiate outbound data channel connection
		if(!datachannel.Create()) {
			m_retmsg.LoadString(IDS_FTPMSG6);
			return FALSE;
		}
		datachannel.Connect(rhost,serversock); // attempt to connect asynchronously (server will tell us if/when we're connected)
	}
	if(!ReadStr() || m_fc!=1) 
		return FALSE; // get response to RETR/STOR command
	if(!pasv&&!sockSrvr.Accept(datachannel)) 
		return FALSE; // if !PASV accept inbound data connection from server
	// we're connected & ready to do the data transfer, so set blocking mode on data channel socket
	if((!datachannel.AsyncSelect(0))
		|| (!datachannel.IOCtl(FIONBIO,&lpArgument))) {
		m_retmsg.LoadString(IDS_FTPMSG6);
		return FALSE;
	}
	while(1) { // move data from/to server & read/write local file
		TRY {
			if(get) {
				if(!(num=datachannel.Receive(cbuf,BUFSIZE,0)) 
					|| num==SOCKET_ERROR) 
					break; // (EOF||network error)
				else 
					datafile.Write(cbuf,num);
			}
			else {
				if(!(numread=datafile.Read(cbuf,BUFSIZE)))
					break; //EOF
				if((numsent=datachannel.Send(cbuf,numread,0))==SOCKET_ERROR) 
					break;
				// if we sent fewer bytes than we read from file, rewind file pointer
				if(numread != numsent) 
					datafile.Seek(numsent-numread,CFile::current);
			}
		}
		CATCH (CException,e) {
			m_retmsg.LoadString(IDS_FTPMSG5);
			return FALSE;
		}
		END_CATCH
	}
	datachannel.Close();
	datafile.Close();
	if(!FTPcommand("")) 
		return FALSE; // check transfer outcome msg from server
	AfxMessageBox("文件下載成功!");
	return TRUE; // oh goody it worked.
}

CFTPClient::Disconnect()
{
	if(m_Ctrlsok != NULL){
		m_Ctrlsok->Close();
	}
	SAFEDELTE(m_pCtrlRxarch);
	SAFEDELTE(m_pCtrlTxarch);
	SAFEDELTE(m_pCtrlsokfile);
	SAFEDELTE(m_Ctrlsok);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合色区另类av| 激情五月激情综合网| 蜜臀av性久久久久av蜜臀妖精| 国产一区999| 欧美精品日韩一本| 亚洲国产精品传媒在线观看| 日韩精品五月天| 99精品视频在线免费观看| 精品乱人伦小说| 亚洲动漫第一页| 99久久久久免费精品国产 | 亚洲午夜电影网| 国产成a人亚洲| 欧美成人一区二区| 五月天亚洲精品| 色av综合在线| 中文字幕在线观看不卡视频| 狠狠色狠狠色综合| 91精品国产日韩91久久久久久| 亚洲视频一区二区在线| 粉嫩13p一区二区三区| 精品粉嫩超白一线天av| 日本强好片久久久久久aaa| 欧美制服丝袜第一页| 亚洲欧美综合在线精品| 成人app软件下载大全免费| 精品处破学生在线二十三| 人禽交欧美网站| 88在线观看91蜜桃国自产| 亚洲午夜国产一区99re久久| 99视频一区二区三区| 欧美国产成人在线| 国产成人av一区二区三区在线 | 欧美一区二区三区免费观看视频| 亚洲精品国产无套在线观| aaa国产一区| 亚洲欧美激情插 | 精品国产伦一区二区三区观看方式 | 日韩欧美亚洲国产精品字幕久久久| 亚洲国产日韩a在线播放性色| 一本到三区不卡视频| 亚洲欧美日韩国产综合在线| 91麻豆精品一区二区三区| 亚洲天堂2016| 欧美综合在线视频| 三级欧美在线一区| 26uuu亚洲综合色欧美| 国产精品一二三四| 亚洲欧洲精品一区二区精品久久久| av动漫一区二区| 亚洲成精国产精品女| 日韩免费观看高清完整版| 韩国一区二区在线观看| 欧美激情艳妇裸体舞| 91亚洲国产成人精品一区二区三| 亚洲综合小说图片| 日韩欧美视频在线| 国产精品一区二区在线观看网站| 国产精品美女久久久久久2018| 91国内精品野花午夜精品| 石原莉奈在线亚洲二区| 久久品道一品道久久精品| 成人18视频在线播放| 亚洲成人三级小说| 久久麻豆一区二区| 日本精品视频一区二区| 美女在线观看视频一区二区| 国产精品蜜臀在线观看| 在线成人av影院| 丰满少妇在线播放bd日韩电影| 亚洲在线中文字幕| 精品国产欧美一区二区| 色婷婷久久综合| 久久99精品久久久| 亚洲另类在线一区| 精品99一区二区| 精品视频123区在线观看| 国产老妇另类xxxxx| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美精选午夜久久久乱码6080| 国产美女精品一区二区三区| 综合久久久久久久| 精品国产乱码久久久久久蜜臀| 91视频你懂的| 国产精品性做久久久久久| 亚洲国产精品一区二区www在线| 久久先锋影音av| 欧美人与z0zoxxxx视频| 99精品欧美一区二区蜜桃免费| 奇米四色…亚洲| 亚洲精品高清在线| 中文字幕av一区二区三区高| 欧美一区二区三区日韩视频| 91黄色激情网站| 粉嫩久久99精品久久久久久夜| 日韩激情一二三区| 一区二区三区四区在线| 国产精品久久一卡二卡| 26uuu精品一区二区在线观看| 欧美欧美欧美欧美| 在线一区二区三区四区五区 | 欧美韩国一区二区| 欧美va亚洲va| 日韩午夜激情av| 欧美日韩色综合| 日本精品一区二区三区四区的功能| 高清国产午夜精品久久久久久| 午夜在线成人av| 亚洲一区日韩精品中文字幕| 亚洲品质自拍视频网站| 久久精品免费在线观看| 欧美精品一区二区在线观看| 欧美一区二区三区成人| 欧美一区二区三区在线观看视频| 91视频91自| 91麻豆国产福利在线观看| 成人成人成人在线视频| 成人动漫视频在线| 成+人+亚洲+综合天堂| 成人av在线看| 91丨porny丨蝌蚪视频| 色婷婷久久久综合中文字幕| 一本色道亚洲精品aⅴ| 欧美亚日韩国产aⅴ精品中极品| 色猫猫国产区一区二在线视频| 91黄色免费版| 欧美精品色一区二区三区| 日韩色在线观看| 欧美成人bangbros| 国产日韩精品一区二区三区| 国产精品欧美综合在线| 亚洲视频你懂的| 亚洲成人精品影院| 人禽交欧美网站| 国产一区二区日韩精品| 99久久久国产精品免费蜜臀| 在线观看视频91| 91麻豆精品国产91久久久使用方法| 日韩一卡二卡三卡国产欧美| 久久综合一区二区| 一区在线观看免费| 午夜国产不卡在线观看视频| 蓝色福利精品导航| 成人综合婷婷国产精品久久免费| 99国内精品久久| 欧美二区在线观看| 久久久久九九视频| 亚洲综合网站在线观看| 精品一区二区三区免费视频| 丁香天五香天堂综合| 在线精品亚洲一区二区不卡| 欧美电影免费提供在线观看| 国产精品久久久久久久第一福利 | 99国产精品久久久久| 欧美人妖巨大在线| 欧美国产国产综合| 日韩高清不卡一区二区三区| 国产成人综合亚洲网站| 欧美午夜在线一二页| 久久人人97超碰com| 一区二区三区精品视频| 97久久精品人人爽人人爽蜜臀| 91久久精品日日躁夜夜躁欧美| 日韩精品在线一区| 亚洲久草在线视频| 国产精品羞羞答答xxdd| 欧美日韩午夜在线| 中日韩免费视频中文字幕| 日韩极品在线观看| 91视视频在线观看入口直接观看www | 欧美日韩高清影院| 国产精品毛片大码女人| 久久精品国产免费看久久精品| 91看片淫黄大片一级| 26uuu国产在线精品一区二区| 亚洲国产综合人成综合网站| 成+人+亚洲+综合天堂| 日韩免费高清视频| 天天影视色香欲综合网老头| 99热精品国产| 欧美国产国产综合| 狠狠色丁香久久婷婷综合_中| 欧美日韩在线精品一区二区三区激情 | 国产精品久久二区二区| 精品一区二区三区免费毛片爱| 欧美日韩电影一区| 一区二区成人在线观看| 97国产精品videossex| 国产欧美日韩激情| 国产一区二区三区免费| 51精品视频一区二区三区| 一区二区在线免费观看| 99re热这里只有精品免费视频| 国产清纯白嫩初高生在线观看91 | 欧美高清性hdvideosex| 亚洲一区二区三区中文字幕在线| 91免费视频网| 亚洲精品成人a在线观看| 99久久精品99国产精品| 国产精品白丝在线|