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

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

?? datasocket.cpp

?? 用套接字實現的ftp文件傳輸源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/********************************************************************/
/*																	*/
/*  DataSocket.cpp													*/
/*																	*/
/*  Implementation of the Data Socket.								*/
/*																	*/
/*  Programmed by Pablo van der Meer								*/
/*	http://www.pablovandermeer.nl									*/
/*																	*/
/*  Last updated: 29 july 2002										*/
/*																	*/
/********************************************************************/


#include "stdafx.h"
#include "resource.h"
#include "DataSocket.h"
#include "ConnectSocket.h"
#include "ConnectThread.h"
#include <afxpriv.h>

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

#define PACKET_SIZE 4096

/********************************************************************/
/*																	*/
/* Function name : CDataSocket::CDataSocket							*/
/* Description   : Constructor										*/
/*																	*/
/********************************************************************/
CDataSocket::CDataSocket(CConnectSocket *pSocket, int nTransferType)
{
	m_nTransferType = nTransferType;
	m_pConnectSocket = pSocket;
	m_nStatus = XFERMODE_IDLE;
	m_strData = "";
	m_File.m_hFile = NULL;
	m_bConnected = FALSE;
	m_dwRestartOffset = 0;
	m_bInitialized = FALSE;
}


/********************************************************************/
/*																	*/
/* Function name : CDataSocket::~CDataSocket						*/
/* Description   : Destructor										*/
/*																	*/
/********************************************************************/
CDataSocket::~CDataSocket()
{
	m_bConnected = FALSE;
	TRACE0("CDataSocket destroyed.\n");
}


#if 0
BEGIN_MESSAGE_MAP(CDataSocket, CAsyncSocket)
	//{{AFX_MSG_MAP(CDataSocket)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif	// 0


/********************************************************************/
/*																	*/
/* Function name : CDataSocket::OnSend								*/
/* Description   : Called by the framework to notify socket	that	*/
/*				   it can send data by calling the Send method.		*/
/*																	*/
/********************************************************************/
void CDataSocket::OnSend(int nErrorCode) 
{
	CAsyncSocket::OnSend(nErrorCode);
	switch(m_nStatus)
	{
		case XFERMODE_LIST:
		{
			while (m_nTotalBytesTransfered < m_nTotalBytesSend)
			{
				DWORD dwRead;
				int dwBytes;

				CString strData;
				
				dwRead = m_strData.GetLength();
				
				if (dwRead <= PACKET_SIZE)
				{
					strData = m_strData;
				}
				else
				{
					strData = m_strData.Left(PACKET_SIZE);
					dwRead = strData.GetLength();
				}
				
				if ((dwBytes = Send(strData, dwRead)) == SOCKET_ERROR)
				{
					if (GetLastError() == WSAEWOULDBLOCK) 
					{
						Sleep(0);
						break;
					}
					else
					{
						TCHAR szError[256];
						wsprintf(szError, "Server Socket failed to send: %d", GetLastError());

						// close the data connection.
						Close();

						m_nTotalBytesSend = 0;
						m_nTotalBytesTransfered = 0;

						// change status
						m_nStatus = XFERMODE_IDLE;

						m_pConnectSocket->SendResponse("426 Connection closed; transfer aborted.");

						// destroy this socket
						AfxGetThread()->PostThreadMessage(WM_THREADMSG, 0, 0);
					}
				}
				else
				{
					m_nTotalBytesTransfered += dwBytes;

					m_strData = m_strData.Mid(dwBytes);
					
					((CConnectThread *)AfxGetThread())->IncSentBytes(dwBytes);
				}
			}
			if (m_nTotalBytesTransfered == m_nTotalBytesSend)
			{
                // close the data connection.
                Close();

                m_nTotalBytesSend = 0;
                m_nTotalBytesTransfered = 0;

                // change status
				m_nStatus = XFERMODE_IDLE;

				// tell the client the transfer is complete.
				m_pConnectSocket->SendResponse("226 Transfer complete");
				// destroy this socket
				AfxGetThread()->PostThreadMessage(WM_THREADMSG, 0, 0);
			}
			break;
		}
		case XFERMODE_SEND:
		{
			while (m_nTotalBytesTransfered < m_nTotalBytesSend)
			{
				// allocate space to store data
				byte data[PACKET_SIZE];
				
				m_File.Seek(m_nTotalBytesTransfered, CFile::begin);

				DWORD dwRead = m_File.Read(data, PACKET_SIZE);
    
				int dwBytes;

				if ((dwBytes = Send(data, dwRead)) == SOCKET_ERROR)
				{
					if (GetLastError() == WSAEWOULDBLOCK) 
					{
						Sleep(0);
						break;
					}
					else
					{
						TCHAR szError[256];
						wsprintf(szError, "Server Socket failed to send: %d", GetLastError());

						// close file.
						m_File.Close();
						m_File.m_hFile = NULL;

						// close the data connection.
						Close();

						m_nTotalBytesSend = 0;
						m_nTotalBytesTransfered = 0;

						// change status
						m_nStatus = XFERMODE_IDLE;

						m_pConnectSocket->SendResponse("426 Connection closed; transfer aborted.");

						// destroy this socket
						AfxGetThread()->PostThreadMessage(WM_THREADMSG, 0, 0);

						// download failed
						((CConnectThread *)AfxGetThread())->UpdateStatistic(FTPSTAT_DOWNLOADFAILED);
					}
				}
				else
				{
					m_nTotalBytesTransfered += dwBytes;
					
					((CConnectThread *)AfxGetThread())->IncSentBytes(dwBytes);
				}
			}
			if (m_nTotalBytesTransfered == m_nTotalBytesSend)
			{
				// close file.
                m_File.Close();
				m_File.m_hFile = NULL;

                // close the data connection.
                Close();

                m_nTotalBytesSend = 0;
                m_nTotalBytesTransfered = 0;

                // change status
				m_nStatus = XFERMODE_IDLE;

				// tell the client the transfer is complete.
				m_pConnectSocket->SendResponse("226 Transfer complete");
				// destroy this socket
				AfxGetThread()->PostThreadMessage(WM_THREADMSG, 0, 0);
				// download successfull
				((CConnectThread *)AfxGetThread())->UpdateStatistic(FTPSTAT_DOWNLOADSUCCEEDED);
			}
			break;
		}
//		default:
//			break;
	}
}


/********************************************************************/
/*																	*/
/* Function name : CDataSocket::OnConnect							*/
/* Description   : Called by the framework to notify connecting		*/
/*				   socket that its connection attempt is completed	*/
/*																	*/
/********************************************************************/
void CDataSocket::OnConnect(int nErrorCode) 
{
	if (nErrorCode)
	{
		m_nStatus = XFERMODE_ERROR;
		m_pConnectSocket->SendResponse("425 Can't open data connection.");
		// destroy this socket
		AfxGetThread()->PostThreadMessage(WM_THREADMSG, 0, 0);
	}
	else
	{
		switch (m_nTransferType)
		{
			case 0:	// List Directory
				m_nStatus = XFERMODE_LIST;
				m_bConnected = TRUE;
				OnSend(0);
				break;
			case 1:	// Send File
				if (PrepareSendFile(m_strData))
				{
					m_nStatus = XFERMODE_SEND;
					m_bConnected = TRUE;
				}
				else
				{
					Close();
				}
				break;
			case 2:	// Receive File
				if (PrepareReceiveFile(m_strData))
				{
					m_nStatus = XFERMODE_RECEIVE;
					m_bConnected = TRUE;
				}
				else
				{
					Close();
					m_pConnectSocket->SendResponse("450 can't access file.");
					// destroy this socket
					AfxGetThread()->PostThreadMessage(WM_THREADMSG, 0, 0);
					// upload failed
					((CConnectThread *)AfxGetThread())->UpdateStatistic(FTPSTAT_UPLOADFAILED);
				}
				break;
		}
	}
	CAsyncSocket::OnConnect(nErrorCode);
}


/********************************************************************/
/*																	*/
/* Function name : CDataSocket::OnClose								*/
/* Description   : Called by the framework to notify this socket	*/
/*				   that the connected socket is closed.				*/
/*																	*/
/********************************************************************/
void CDataSocket::OnClose(int nErrorCode) 
{
	TRACE0("CDataSocket() OnClose()\n");
	if (m_pConnectSocket)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产精品自在自线| 亚洲大尺度视频在线观看| 亚洲欧美自拍偷拍色图| 婷婷成人激情在线网| 99久免费精品视频在线观看| 正在播放亚洲一区| 亚洲最大成人综合| 成人毛片视频在线观看| 欧美大胆一级视频| 亚洲国产日韩精品| 99re亚洲国产精品| 欧美国产一区在线| 久久er99精品| 欧美日韩mp4| 亚洲小说春色综合另类电影| 972aa.com艺术欧美| 国产欧美日韩综合| 国产乱子伦视频一区二区三区 | 成人免费在线视频观看| 精品一区二区三区香蕉蜜桃| 欧美美女一区二区在线观看| 亚洲欧美自拍偷拍| 99精品视频在线观看免费| 国产日本亚洲高清| 国产美女久久久久| 久久久久久日产精品| 精品一区二区三区免费| 精品欧美一区二区三区精品久久 | 性久久久久久久久久久久| 一本到一区二区三区| 中文字幕一区二区三区蜜月| 高清日韩电视剧大全免费| 久久色在线视频| 国产成人鲁色资源国产91色综| 精品久久一二三区| 国产麻豆精品95视频| 国产日产欧美一区二区三区| 粉嫩av一区二区三区粉嫩| 国产日韩欧美a| 波多野洁衣一区| 综合精品久久久| 97se亚洲国产综合自在线| 夜夜嗨av一区二区三区网页| 欧美三级视频在线观看| 免费久久精品视频| 2014亚洲片线观看视频免费| 国产69精品久久久久777| 中文字幕制服丝袜成人av| 91麻豆免费观看| 亚洲高清在线视频| 精品蜜桃在线看| 丁香桃色午夜亚洲一区二区三区| 国产精品久久久久一区| 一本到不卡精品视频在线观看| 亚洲国产综合在线| 日韩精品综合一本久道在线视频| 国产精品正在播放| 18成人在线视频| 欧美日韩国产中文| 黄色小说综合网站| 亚洲色图.com| 欧美成人猛片aaaaaaa| 成人免费三级在线| 亚洲国产精品精华液网站| 日韩三级免费观看| 波多野结衣91| 久久精品国产第一区二区三区| 亚洲国产精华液网站w| 欧美色视频一区| 国产成人综合亚洲91猫咪| 亚洲国产日韩一区二区| 国产亚洲精品aa午夜观看| 欧美亚洲禁片免费| 国产精品91一区二区| 亚洲综合激情另类小说区| 337p粉嫩大胆噜噜噜噜噜91av| 91猫先生在线| 国产精品99久久久久久久vr| 亚洲第一主播视频| 国产精品天天摸av网| 日韩欧美专区在线| 色噜噜狠狠一区二区三区果冻| 经典三级在线一区| 亚洲国产欧美在线| 日本一区二区三区四区| 91麻豆精品国产91| 91福利在线免费观看| 国产精品一区二区你懂的| 日本一区中文字幕| 亚洲精品中文在线观看| 中文av字幕一区| 欧美videofree性高清杂交| 欧美日韩一区二区三区在线看| 成人小视频免费在线观看| 久久精品国产一区二区三| 一区二区三区四区乱视频| 国产精品国产自产拍在线| 欧美大片在线观看一区二区| 欧美理论在线播放| 欧美视频一二三区| 99精品热视频| 99re热视频精品| av福利精品导航| 成人黄色电影在线| 成人免费观看视频| av在线一区二区三区| 成人精品视频.| 国产不卡在线播放| 国产99精品视频| 国产成人在线免费观看| 国产精品一区二区在线看| 久久99久久99| 韩国av一区二区三区在线观看 | 亚洲一二三区视频在线观看| 一区二区三区四区国产精品| 亚洲男人的天堂在线观看| 亚洲人成网站色在线观看| 亚洲日本乱码在线观看| 亚洲人成在线观看一区二区| 亚洲黄色在线视频| 一区二区久久久久久| 一区二区三区色| 亚洲一卡二卡三卡四卡五卡| 亚洲国产精品一区二区久久| 亚洲成国产人片在线观看| 婷婷开心激情综合| 老司机精品视频在线| 韩国女主播一区二区三区| 国产高清在线精品| 99re视频精品| 欧美日韩黄色影视| 精品国产精品网麻豆系列 | 国产精品69毛片高清亚洲| 不卡的电视剧免费网站有什么| 一本久久a久久免费精品不卡| 日本福利一区二区| 欧美精品丝袜中出| 久久无码av三级| 亚洲欧美在线观看| 亚洲成人手机在线| 国产成人精品一区二| 色婷婷香蕉在线一区二区| 欧美精品乱码久久久久久| 精品国产欧美一区二区| 中文字幕一区免费在线观看| 亚洲制服丝袜在线| 国产一区二区精品久久| av不卡在线观看| 欧美一级在线视频| 国产精品麻豆久久久| 五月天视频一区| 国产精品资源在线| 欧美人牲a欧美精品| 国产日韩精品一区二区浪潮av | 亚洲视频 欧洲视频| 日韩av在线免费观看不卡| 成人午夜视频网站| 日韩西西人体444www| 亚洲三级电影网站| 精品一区二区三区免费毛片爱| 91蝌蚪porny| 久久久久九九视频| 亚洲成人免费在线观看| av一区二区不卡| 日韩欧美久久久| 亚洲一区二区综合| 成人国产精品免费网站| 精品国产亚洲在线| 五月综合激情婷婷六月色窝| 成人免费高清在线观看| 久久一夜天堂av一区二区三区 | 国产精品一区二区三区四区| 欧美日韩亚洲高清一区二区| 国产精品二三区| 狠狠狠色丁香婷婷综合久久五月| 欧美日韩精品欧美日韩精品一 | 久久久久国产精品麻豆| 午夜欧美一区二区三区在线播放| 成人网男人的天堂| 久久久久久免费网| 毛片av一区二区| 欧美高清精品3d| 亚洲精品国产成人久久av盗摄 | 国产成人8x视频一区二区| 欧美一区二区三区免费视频 | 中文字幕一区二区三区精华液 | 九九精品视频在线看| 欧美福利电影网| 亚洲va欧美va国产va天堂影院| 91丨porny丨国产| 国产精品欧美精品| 福利一区二区在线观看| 久久天天做天天爱综合色| 久久国产综合精品| 日韩欧美色综合网站| 韩国av一区二区三区四区| 精品成人a区在线观看| 韩国午夜理伦三级不卡影院| 久久蜜桃av一区精品变态类天堂| 久久97超碰国产精品超碰|