设为首页 加入收藏

TOP

3.3.1 FTP编程(1)
2013-10-07 15:54:07 来源: 作者: 【 】 浏览:93
Tags:3.3.1 FTP 编程

3.3  小试牛刀--FTP文件处理

前面介绍了FTP协议的基本知识,了解了FTP的主要功能是实现文件传输。在本节的内容中,将讲解使用Visual C++(www.cppentry.com)实现FTP文件传输功能的实现流程。

3.3.1  FTP编程(www.cppentry.com)(1)

FTP是MFC的WinInet支持的三个Internet功能(另外两个是HTTP和gopher)之一,我们需要先创建一个CInternetSession实例和一个CFtpConnection对象,这样就可以实现与一个FTP服务器的通信了。我们不需要直接创建CFtpConnection对象,而是通过调用CInternetsession::GetFtpConnection来完成这项工作,它创建CFtpConnection对象并返回一个指向该对象的指针。

需要使用如下两个步骤来接到FTP服务器。

(1) 创建一个CInternetSession对象,用类CInternetSession创建并初始化一个或几个同时存在的Internet会话(Session) ,并描述与代理服务器的连接(如果有必要的话),如果在程序运行期间需要保持与Internet的连接,可以创建一个CInternetsession对象作为类 CWinApp的成员。

(2) 用CInternetsession对象获取CFtpConnection对象。MFC中的类CFtpConnection用于管理我们与Internet服务器的连接,并直接操作服务器上的目录和文件。

1. FTP连接类

需要使用CInternetsession对象和GetFtpConnection()函数来实现连接。

(1) CInternetsession对象

创建CInternetsession对象的语法格式如下:

  1. CInternetsession(LPCTSTR pstrAgent,  
  2. DWORD dwConText, DWORD dwACCESSType,  
  3. LPCTSTR pstrProxyName, LPCTSTR pstrProxyBypass,  
  4. DWORD dwFlags); 

在创建CInternetSession对象时调用这个成员函数,CInternetsession是应用程序第一个要调用的Internet函数,它将创始化内部数据结构,以备将来在应用程序中调用。如果dwFlags包含INTERNET_FLAG_ASYNC,那么从这个句柄派生的所有的句柄,在状态回调例程注冊之前,都会出现异步状态。如果没有打开Internet连接,CInternetsession就会抛出AfxThrowInternetException异常。

(2) GetFtpConnection()函数

GetFtpConnection()函数的语法格式如下:

  1. CFtpConnection* CIternetsession::GetFtpConnection(LPCTSTR pstrServer,  
  2. LPCTSTR pstrUserName, LPCTSTR pstrPassword,  
  3. INTERNET_PORT nPort, BOOL bPassive); 

调用GetFtpConnection()函数可以建立一个FTP连接,并获得一个指向CFtpConnection对象的指针,GetFtpConnection连接到一个FTP服务器,创建并返回指向CFtpConnection对象的指针,它不在服务器上进行任何操作。如果打算读写文件,必须进行分步操作。

调用GetFtpConnection()函数会返回一个指向CFtpConnection对象的指针。如果调用失败,检查抛出的CInternetException对象,就可以确定失败的原因。

2. 文件上传下载删除

可以通过如下函数实现对上传文件的上传、下载和删除操作。

(1) GetFile()函数

GetFile()函数的语法格式如下:

  1. BOOL GetFile(LPCTSTR pstrRemoteFile, LPCTSTR pstrLocalFile,  
  2. BOOL bFailExists, DWORD dwAttributes,  
  3. DWORD dwFlags, DWORD dwContext); 

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

pstrRemoteFile和pstrLocalFile可以是相对于当前目录的部分文件名,也可以是全文件名,在这两个名字中间,都可以用反斜杠(\)或者正斜杠(/)来作为文件名的目录分隔符,GetFile()在使用前会把目录分隔符转化为适当的字符。

可以用自己选择的值来取代dwContext默认的值,设置为上下文标识符与CFtpConnection对象的定位操作有关,此操作由CFtpConnection中的CInternetSession对象创建。返回给CInternetsession::OnStatusCallBack的值设置了所标识操作的状态。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.2.2 使用Telnet协议(2) 下一篇2.1.1 TCP协议基础(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)