📄 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 + -