在VC中实现FTP功能的方法

上传人:re****.1 文档编号:487405295 上传时间:2023-05-08 格式:DOCX 页数:5 大小:12.87KB
返回 下载 相关 举报
在VC中实现FTP功能的方法_第1页
第1页 / 共5页
在VC中实现FTP功能的方法_第2页
第2页 / 共5页
在VC中实现FTP功能的方法_第3页
第3页 / 共5页
在VC中实现FTP功能的方法_第4页
第4页 / 共5页
在VC中实现FTP功能的方法_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《在VC中实现FTP功能的方法》由会员分享,可在线阅读,更多相关《在VC中实现FTP功能的方法(5页珍藏版)》请在金锄头文库上搜索。

1、要联接到FTP服务器,需要两个步骤,首先必须创建一个CInternetSession对象,用类CIn terSession创建并初始化一个或几个同时存在的Int ernet会话(session),并 描述与代理服务器的连接(如果有必要的话),如果在程一要联接到FTP服务器,需要两个步骤,首先必须创建一个CInternetSession对象,用类 CInterSession创建并初始化一个或几个同时存在的Internet会话(session),并描述与代理服务 器的连接(如果有必要的话),如果在程序运行期间需要保持与 Internet 的连接,可以创建 一个CInternetSession对象作

2、为类CWinApp的成员。_ MFC中的类CFtpConnection管理我们与Internet服务器的连接,并直接操作服务器上的 目录和文件,FTP是MFC的WinInet支持的三个Internet功能之一,我们需要先创建一个 CInternetSession 实例和一个 CFtpConnection 对象就可以实现和一个 FTP 服务器的通信,我 们不需要直接创建 CFtpConnection 对象,而是通过调用 CInternetSession:GetFtpConnection 来完成这项工作。它创建CFtpConnection对象并返回一个指向该对象的指针。Ftp 连接类的信息 下面我

3、们简要介绍连接类的信息CInternetSession 对象 CInternetSession(LPCTSTR pstrAgent,DWORD dwConText ,DWORD dwAccessType,LPCTSTR pstrProxyName,LPCTSTR pstrProxyBypass,DWORD dwFlags); 在创建 CInternetSession 对象时调用这个成员函数, CInternetSession 是应用程序第一个 要调用的Internet函数,它将创始化内部数据结构,以备将来在应用程序中调用。如果dwFlags 包含INTERNET_FLAG_ASYNC,那末从这

4、个句柄派生的所有的句柄,在状态回调例程注冊 之前,都会出现异步状态。如果沒有打开 Internet 连接, CInternetSession 就会抛出一个例外, AfxThorowInternetException。GetFtpConnection()函数 CFtpConnection* CIternetSession:GetFtpConnection(LPCTSTR pstrServer,LPCTSTR pstrUserName,LPCTSTR pstrPassword,INTERNET_PORT nPort,BOOL bPassive); 调用这个函数建立一个 FTP 连接,并获得一个指向

5、 CFtpConnection 对象的指针, GetFtpConnection连接到一个FTP服务器,创建并返回指向CFtpConnection对象的指针,它 不在服务器上进行任何操作。如果打算读写文件,必须进行分步操作。关于查找,打开和读 /写文件的信息需参考CFtpConnection和CFtpFileFind类。-对这个函数的调用返回一个指向CFtpConnection对象的指针。如果调用失败,检查抛出 的 CInternetException 对象,就可以确定失败的原因。GetFile()函数 BOOL GetFile(LPCTSTR pstrRemoteFile,LPCTSTR ps

6、trLocalFile,BOOL bFailExists ,DWORD dwAttributes,DWORD dwFlags,DWORD dwContext); 调用这个成员函数,可以从 FTP 服务器取得文件,并且把文件保存在本地机器上。GetFile()函数是一个比较高级的例程,它可以处理所有有关从FTP服务器读文件,以及把文 件存放在本地机器上的工作。如果dwFlags为FILE_TRANSFER_TYPE_ASCII,文件数据的 传输也会把控制和格式符转化为 Windows 中的等阶符号。默认的传输模式是二进制模式, 文件会以和服务器上相同的格式被下载。pstrRemoteFile和p

7、strLocalFile可以是相对于当前目录的部分文件名,也可以是全文件 名,在这两个名字中间,都既可以用反斜杠 ()或者正斜杠(/)来作为文件名的目录分隔符, GetFile()在使用前会把目录分隔符转化为适当的字符。 可以用自己选择的值来取代 dwContext 默认的值, 设置为上下文标识符与 CFtpConnection 对象的定位操作有关,这个操作由 CFtpConnection 中的 CInternetSession 对 象创建。返回给 CInternetSession:OnStatusCallBack 的值指出了所标识操作的状态。 如果调用成功,函数的返回为非 0,否则返回 0,

8、如果调用失败,可以调用 Win32 函数 GetLastError(),确认出错的原因。PutFile ()函数 BOOL PutFile(LPCTSTR pstrLocalFile, LPCTSTR pstrRemoveFile ,DWORD dwFlags, DWORD dwContext);一 调用这个成员函数可以把文件保存到FTP服务器PutFile()函数是一个比较高级的例程, 它可以处理有关把文件存放到服务器上的工作。只发送数据,或要严格控制文件传输的应用 程序,应该调用OpenFile和CInternet:Write。利用自己选择的值来取代dwContext默认的 值,设置为上下

9、文标识符,上下文标识符是 CInternetSession 对象创建的 CFtpConnection 对 象的特定操作有关,这个值返回给CInternetSession:OnStateCallBack,从而把操作的状态通报 给它所标识的上下文。 如果调用成功,函数的返回为非 0,否则返回 0,如果调用失败,可以调用 Win32 函数 GetLastError(),确认出错的原因。连接到 FTP 站点 建立连接到 的程序,它是一个单文档程序。并且连接由视图类的构造 函数完成建立单文档程序 ftp在 ftpview.h 中加入包含#include 在ftpview.h中添加如下的成员变量publ

10、ic:CInternetSession *m_pInetSession; CFtpConnection *m_pFtpConnection;在 ftpview.cpp 中的 ftpview 构造函数中加入下面的代码CFtpView:CFtpView()m_pInetSession=new CInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);trym_pFtpConnection=m_pInetSession-GetFtpConnection(FTP.MICROSOFT.COM);catch(CInternetExcept

11、ion *pEx)TCHAR szError1024;if(pEx-GetErrorMessage(szError,1024)AfxMessageBox(szError);elseAfxMessageBox(There was an exception);pEx-Delete();m_pFtpConnection=NULL;在 ftpview.cpp 中的 ftpview 析构函数中加入下面的代码CFtpView:CFtpView()if(m_pFtpConnection!=NULL) m_pFtpConnection-Close();delete m_pFtpConnection;delet

12、e m_pInetSession;编译并且执行程序,如果连接出现问题,将会在一个消息框中报告出错消息 发送文件到 FTP 文件服务器-创建一个发送文件到FTP文件服务器的程序建立单文档程序 ftpfw, 在 ftpfwview.h 中加入包含 #include 在 ftpfwview.h 中添加如下的成员变量public:bool m_bConnectionAttempted;int m_nFileStatus;在 ftpview.cpp 中的 ftpview 构造函数中加入下面的代码CFtpfwView:CFtpfwView()m_bConnectionAttempted=false;使用C

13、lassWizard加入新的类CFtpThread,该类派生于CWinThread在ftpthread.h中加入如 下变量public:static UINT PutFile(LPVOID Status);添加新类成员函数代码UINT CFtpThread:PutFile(LPVOID Status)int *pnFileStatus;CInternetSession *pInetSession;CFtpConnection *pFtpConnection=NULL;pnFileStatus=(int *)Status;*pnFileStatus=0;pInetSession=newCInte

14、rnetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);trypFtpConnection=pInetSession-GetFtpConnection(192.34.45.0);catch(CInternetException *pEx)pEx-Delete();pFtpConnection=NULL;*pnFileStatus=-1;goto BallOut;*pnFileStatus =1;pFtpConnection-Remove(test.txt);if(!pFtpConnection-PutFile(test.txt,tes

15、t.txt)*pnFileStatus=-2;else*pnFileStatus=2;BallOut:if(pFtpConnection!=NULL)pFtpConnection-Close();delete pFtpConnection;delete pInetSession;AfxEndThread(0);return false;编辑 ftpfwview.cpp 中的 OnDraw()函数void CFtpfwView:OnDraw(CDC* pDC)CFtpfwDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(!m_bConnectAttempted)m_bConnectAttempted=TRUE;AfxBeginThread(AFX_THREADPROC)CFtpThread:PutFile,&m_nFileStatus);编译并且执行程序,在连接和传输的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号