MFC实现FTP客户端程序
2014-08-31 09:42
260 查看
前天老板要求用iStation提取一些用户的本地信息,信息量比较大,用http协议肯定实现不了了。只能在服务器端开一个ftp,然后由iStation实现上传。
我以为这次真的要接触那些冗繁的socket套接字编程了。先Google一下吧,没想到结果很令人惊喜,MFC居然自带了封装Ftp操作的CFtpConnection类,这可省了大事了。这个类封装的的确比较彻底了,如果进行简单的客户端设计这些已经足够用了。
简单介绍一下实现吧:
public:
CInternetSession* m_pInetSession;
CFtpConnection* m_pFtpConnection;
//CInternetSession 和 CFtpConnection 类包含在afxinet.h头文件中
第一步:建立ftp连接
m_pInetSession = new CInternetSession(
AfxGetAppName(), 1,
PRE_CONFIG_INTERNET_ACCESS);
try{
m_pFtpConnection = m_pInetSession->
GetFtpConnection(addr, username, password, port);
// addr ftp服务器的地址 LPCTSTR
// username 登陆用户名 LPCTSTR
// password 密码 LPCTSTR
// port 端口 UINT
}
//若登陆不成功则抛出异常,以下是针对异常的处理
catch(CInternetException *pEx){
TCHAR szError[1024] = {0};
if(pEx->GetErrorMessage(szError,1024))
AfxMessageBox(szError);
else
AfxMessageBox(_T("There
was an exception"));
pEx->Delete();
m_pFtpConnection = NULL;
return;
}
第二步:发送文件
为了确保在发送的时候,还能够进行其他的操作,所以程序中需要一个文件发送线程,以保证良好的交互性。
首先声明一个线程执行函数:
static UINT PutFile(LPVOID pFtp);
此函数的实现如下,很简单。
UINT PutFile(LPVOID pFtp)
{
CFtpConnection* FtpConnection = (CFtpConnection*)pFtp;
if(FtpConnection->
PutFile(_T("c:/test.txt"), _T("test.txt"))){
MessageBox(NULL, _T("发送成功!"), _T("提示"), MB_OK);
//第一个参数为本地文件的地址,第二个为服务器端文件的地址
return 1;
}
else{
MessageBox(NULL, _T("发送失败!"), _T("提示"), MB_OK);
return 0;
}
}
在主线程里开启上传线程:
CWinThread* th;
th = AfxBeginThread( PutFile, this,
THREAD_PRIORITY_NORMAL, CREATE_SUSPENDED);
th->m_bAutoDelete = FALSE;
th->ResumeThread();
需要说明的是,这里上传功能设计得非常简单。只使用了一个PutFile函数。这个函数封装了服务器端文件上传、写入和关闭等操作,所以本程序并不支持断线续传。如果想使程序支持断线续传,则需要是用CFtpConnection类中的OpenFile函数打开文件,然后使用CInternetFile类的函数来对文件进行读写控制。
第三步:断开连接
没有什么可说明的。
if(m_pFtpConnection != NULL)
{
m_pFtpConnection->Close();
delete m_pFtpConnection;
}
delete m_pInetSession;
总体上看,MFC类对一些常用的网络功能提供了强大的支持,Microsoft有进一步将Windows的程序设计傻瓜化了。可能真的有一天 Visual Studio就像 Word 和 PowerPoint 一样,成为一个纯应用层面上的工具,而不再是令人望而生畏的程序开发软件了。这也正是Microsoft和Gates的野心了。
正如老板说的那样:“当你毕业的时候,如果你对操作系统的认识仅仅是Windows,对硬件的认识仅仅是X86,那是一件很可怕的事情。”
睡觉喽,明天把它copy到公司,联调一下就OK了。然后继续研究Wolf……
我以为这次真的要接触那些冗繁的socket套接字编程了。先Google一下吧,没想到结果很令人惊喜,MFC居然自带了封装Ftp操作的CFtpConnection类,这可省了大事了。这个类封装的的确比较彻底了,如果进行简单的客户端设计这些已经足够用了。
简单介绍一下实现吧:
public:
CInternetSession* m_pInetSession;
CFtpConnection* m_pFtpConnection;
//CInternetSession 和 CFtpConnection 类包含在afxinet.h头文件中
第一步:建立ftp连接
m_pInetSession = new CInternetSession(
AfxGetAppName(), 1,
PRE_CONFIG_INTERNET_ACCESS);
try{
m_pFtpConnection = m_pInetSession->
GetFtpConnection(addr, username, password, port);
// addr ftp服务器的地址 LPCTSTR
// username 登陆用户名 LPCTSTR
// password 密码 LPCTSTR
// port 端口 UINT
}
//若登陆不成功则抛出异常,以下是针对异常的处理
catch(CInternetException *pEx){
TCHAR szError[1024] = {0};
if(pEx->GetErrorMessage(szError,1024))
AfxMessageBox(szError);
else
AfxMessageBox(_T("There
was an exception"));
pEx->Delete();
m_pFtpConnection = NULL;
return;
}
第二步:发送文件
为了确保在发送的时候,还能够进行其他的操作,所以程序中需要一个文件发送线程,以保证良好的交互性。
首先声明一个线程执行函数:
static UINT PutFile(LPVOID pFtp);
此函数的实现如下,很简单。
UINT PutFile(LPVOID pFtp)
{
CFtpConnection* FtpConnection = (CFtpConnection*)pFtp;
if(FtpConnection->
PutFile(_T("c:/test.txt"), _T("test.txt"))){
MessageBox(NULL, _T("发送成功!"), _T("提示"), MB_OK);
//第一个参数为本地文件的地址,第二个为服务器端文件的地址
return 1;
}
else{
MessageBox(NULL, _T("发送失败!"), _T("提示"), MB_OK);
return 0;
}
}
在主线程里开启上传线程:
CWinThread* th;
th = AfxBeginThread( PutFile, this,
THREAD_PRIORITY_NORMAL, CREATE_SUSPENDED);
th->m_bAutoDelete = FALSE;
th->ResumeThread();
需要说明的是,这里上传功能设计得非常简单。只使用了一个PutFile函数。这个函数封装了服务器端文件上传、写入和关闭等操作,所以本程序并不支持断线续传。如果想使程序支持断线续传,则需要是用CFtpConnection类中的OpenFile函数打开文件,然后使用CInternetFile类的函数来对文件进行读写控制。
第三步:断开连接
没有什么可说明的。
if(m_pFtpConnection != NULL)
{
m_pFtpConnection->Close();
delete m_pFtpConnection;
}
delete m_pInetSession;
总体上看,MFC类对一些常用的网络功能提供了强大的支持,Microsoft有进一步将Windows的程序设计傻瓜化了。可能真的有一天 Visual Studio就像 Word 和 PowerPoint 一样,成为一个纯应用层面上的工具,而不再是令人望而生畏的程序开发软件了。这也正是Microsoft和Gates的野心了。
正如老板说的那样:“当你毕业的时候,如果你对操作系统的认识仅仅是Windows,对硬件的认识仅仅是X86,那是一件很可怕的事情。”
睡觉喽,明天把它copy到公司,联调一下就OK了。然后继续研究Wolf……
相关文章推荐
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序(一)
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 应用层――使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序(来自IBM)
- 使用 Socket 通信实现 FTP 客户端程序