?? baseftp.cpp
字號:
// BaseFtp.cpp: implementation of the CBaseFtp class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include "SimpleFtp.h"
#include "BaseFtp.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBaseFtp::CBaseFtp()
{
}
CBaseFtp::~CBaseFtp()
{
}
void CBaseFtp::SetPathName(CString& strPathName)
{
m_strPathName=strPathName;
}
CString CBaseFtp::GetPathName()
{
return m_strPathName;
}
void CBaseFtp::SetFileName(CString &strFileName)
{
m_strFileName=strFileName;
}
CString CBaseFtp::GetFileName()
{
return m_strFileName;
}
DWORD CBaseFtp::SendFlag()
{
//首先發送標記
int end=0;
end=m_socket.Send(FLAG,FLAGSIZE);
/////////////////////////發送標志是否成功
if(end==SOCKET_ERROR){
DWORD dwe=GetLastError();
return dwe;
}
else if(end!=FLAGSIZE){
return BADJOB;
}
return GOODJOB;
}
DWORD CBaseFtp::ReceiveFlag()
{
//首先接收標記
int end=0;
char flag[20];
end=m_socket.Receive(flag,FLAGSIZE);
/////////////////////////接收標志是否成功
if(end==SOCKET_ERROR){////end=-1
DWORD dwe=GetLastError();
return dwe;
}
else if(end!=FLAGSIZE||strcmp(flag,"KRRFILE")){
return BADJOB;
}
return GOODJOB;
}
DWORD CBaseFtp::SendFileInfo()
{
//獲取文件信息
CFile myFile;
if(!myFile.Open(m_strPathName, CFile::modeRead | CFile::typeBinary))
return BADJOB;
//得到文件大小
m_FileInfo.dwSize=myFile.GetLength();
//得到文件名稱
strcpy(m_FileInfo.strName,myFile.GetFileName());
//設置文件名稱
m_strFileName=m_FileInfo.strName;
myFile.Close();
//發送文件信息
int end=0;
end=m_socket.Send(&m_FileInfo,sizeof(m_FileInfo));
/////////////////////////發送標志是否成功
if(end==SOCKET_ERROR){
DWORD dwe=GetLastError();
return dwe;
}
else if(end!=sizeof(m_FileInfo)){
return BADJOB;
}
return GOODJOB;
}
DWORD CBaseFtp::ReceiveFileInfo()
{
//接收文件信息
int end=0;
end=m_socket.Receive(&m_FileInfo,sizeof(m_FileInfo));
/////////////////////////接收標志是否成功
if(end==SOCKET_ERROR){
DWORD dwe=GetLastError();
return dwe;
}
else if(end!=sizeof(m_FileInfo)){
return BADJOB;
}
//設置文件名稱
m_strFileName=m_FileInfo.strName;
return GOODJOB;
}
DWORD CBaseFtp::SendFile(CProgressCtrl* Progress)
{
CFile myFile;
if(!myFile.Open(m_strPathName, CFile::modeRead | CFile::typeBinary))
return BADJOB;
if(Progress!=NULL)
Progress->SetRange32(0,m_FileInfo.dwSize);
myFile.Seek(0,CFile::begin);
char buf[SIZEFILE]={0};
int num=0,end=0;
DWORD temp=0;
for(;;){
num=myFile.Read(buf, SIZEFILE);
if(num==0) break;//文件傳輸終止。
end=m_socket.Send(buf, num);
temp+=end;
//進度條控制:
if(Progress!=NULL)
Progress->SetPos(temp);
if(end==SOCKET_ERROR){
DWORD dwe=GetLastError();
return dwe;
}
}
if(Progress!=NULL)
Progress->SetPos(0);
if(temp==m_FileInfo.dwSize)
return GOODJOB;
else
return BADJOB;
myFile.Close();
return GOODJOB;
}
DWORD CBaseFtp::ReceiveFile(CProgressCtrl* Progress)
{
char buf[SIZEFILE]={0};
CFile f(m_strPathName,CFile::modeCreate|CFile::modeWrite); //存文件
if(Progress!=NULL)
Progress->SetRange32(0,m_FileInfo.dwSize);
int n=0; //接受的字節數 0表示結束
DWORD temp=0;
for(;;)
{
n=m_socket.Receive(buf,SIZEFILE); //接受
if(n==0) //0表示結束
break; //接受完畢
f.Write(buf,n);
temp+=n;
if(Progress!=NULL)
Progress->SetPos(temp);
}
f.Close();
if(Progress!=NULL)
Progress->SetPos(0);
if(temp==m_FileInfo.dwSize)
return GOODJOB;
else
return BADJOB;
return GOODJOB;
}
CString CBaseFtp::GetErrorString(DWORD &error)
{
CString strError;
switch(error)
{
case WSANOTINITIALISED:
strError="初始化錯誤";
break;
case WSAENOTCONN:
strError="對方沒有啟動";
break;
case WSAEWOULDBLOCK :
strError="對方已經關閉";
break;
case WSAECONNREFUSED:
strError="連接的嘗試被拒絕";
break;
case WSAENOTSOCK:
strError="在一個非套接字上嘗試了一個操作";
break;
case WSAEADDRINUSE:
strError="特定的地址已在使用中";
break;
case WSAECONNRESET:
strError="與主機的連接被關閉";
break;
default:
CString strTemp;
strTemp.Format("_Code:%d",error);
strError="其他錯誤"+strTemp;
}
return strError;
}
void CBaseFtp::TryGetError(DWORD &dwerror)
{
switch(dwerror){
case GOODJOB:
break;
case BADJOB:
AfxMessageBox("There is a badjob!");
break;
default:
AfxMessageBox(CBaseFtp::GetErrorString(dwerror));
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -