`
javababy1
  • 浏览: 1169346 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用WinInet开发Internet客户端应用指南(二)

 
阅读更多

二、实现步骤

大家知道,每个Internet客户端程序都伴随有一定的目的行为,如读文件、写文件、删除文件等等。客户端的程序要实现这些行为的先决条件是建立Internet连接。然后再根据不同的目的进行具体的操作。为了方便起见,下面这这些张表格针对不同的应用行为列出了所需要的具体操作。其中列出了一般的Internet URL (FTP、或者 HTTP)客户端行为要实现某个目标所必须使用的方法。这张表格的内容来自MSDN。我对部分我认为重要的地方做了补充。

(表一)一个典型的Internet客户端程序的处理流程

目的

方法

结果

开始一个Internet session

创建 CInternetSession 对象

初始化WinInet,并连接服务器

读取或设置 InternetQuery 选项 (如超时或重试次数)

调用 CInternetSession::SetOption

不成功返回FALSE

建立回调函数监视session状态

调用CInternetSession::EnableStatusCallback

建立回调函数

CInternetSession::OnStatusCallback,重写OnStatusCallback,创建自己的回调例程

Internet服务器Intranet服务器或本地文件

调用 CInternetSession::OpenURL

解析并打开到指定服务器的连接,返回CStdioFile(如果你传递的OpenURL是本地文件名)或CInternetFile对象,通过存取这个对象,获得服务器或文件的数据

读文件

调用 CInternetFile::Read

用你提供的Buffer读指定的字节数

异常处理

CInternetException 类中处理

处理所有普通的 Internet 异常类型

结束 Internet session 处理

CInternetSession对象

自动清除打开的句柄的连接

(表二)典型的 FTP 客户端程序实现的一般步骤

目的

方法

结果

开始一个FTP会话,建立一个FTP连接

创建一个CInternetSession对象,调用CInternetSession::GetFtpConnection

初始化WinInet

并联接服务器

连接到一个FTP Server

CInternetSession::GetFtpConnection

返回一个CFtpConnection对象

CD FTP 服务器的一个新目录

CFtpConnection::SetCurrentDirectory

CDFTP服务器的一个

新目录

Find 第一个FTP目录中的文件

创建一个CFtpFileFind对象,调用CFtpFileFind::FindFileOpenURL函数返回一个只读资源对象;调用CFtpFileFind::FindFile

Find第一个文件,如果文件每找到返回FALSE

枚举所有可获得的资源,Find下一个FTP目录中的文件

Find下一个资源,调用CFtpFileFind::FindNextFile直到返回FALSE

Find下一个文件

如果文件没找到返回FALSE

打开FindFileFindNextFile找到的文件(用于读写)

调用CFtpConnection::OpenFile,参数为FindFileFindNextFile返回的文件名 ,创建并打开一个CInternetFile对象

打开FindFileFindNextFile找到的文件(用于读写),返回一个CInternetFile对象

读写文件

以读方式打开FTP文件,用CInternetFile::Read

使用你指定的缓冲读

指定的字节数

FTP文件

以写方式打开FTP文件,调用CInternetFile::Write,重写CInternetSession::OnStatusCallback

使用你指定的缓冲写

指定的字节数

改变客户端在服务器上的目录

调用CFtpConnection::SetCurrentDirectory

进入新的目录

获取客户端在服务器上的当前目录

调用CFtpConnection::GetCurrentDirectory

获取目录信息

异常处理

CInternetException

处理所有普通的Internet异常类型

结束FTP session

处理CInternetSession对象

自动清除打开的句柄的连接

(表三)显示了一个典型的删除文件的FTP客户端应用要实现的一般步骤:

目的

方法

结果

开始一个FTP session

创建一个CInternetSession对象

初始化WinInet

并联接服务器

连接到一个FTP Server

CInternetSession::GetFtpConnection

返回一个CFtpConnection对象

检查FTP目录是否正确

CFtpConnection::GetCurrentDirectoryCFtpConnection::GetCurrentDirectoryAsURL

返回目录名字

服务器目录或返回目录的URL

CD(改变目录)到 FTP 服务器的一个新目录

CFtpConnection::SetCurrentDirectory

CDFTP服务器的一个

新目录

Find 第一个FTP目录中的文件

CFtpFileFind::FindFile

Find第一个文件,如果文件每找到返回FALSE

Find 下一个FTP目录中的文件

CFtpFileFind::FindNextFile

Find下一个文件

如果文件没找到返回FALSE

删除FindFileFindNextFile找到的文件

CFtpConnection::RemoveFindFileFindNextFile返回的文件名

删除FindFileFindNextFile

找到的文件

异常处理

CInternetException

处理所有普通的Internet异常类型

结束FTP session

处理CInternetSession对象

自动清除打开的句柄的连接

(表四)显示了实现一个典型的 HTTP 客户端应用程序的一般步骤:

目的

方法

结果

开始HTTP会话,建立HTTP连接

创建 CInternetSession对象,调用CInternetSession::GetHttpConnection

创建CHttpConnection对象

初始化WinInet并联接服务器,返回一个CHttpConnection对象

创建一个 HTTP 请求

调用CHttpConnection::OpenRequest

创建一个CHttpFile对象;

返回一个CHttpFile对象

发送一个HTTP 请求

CHttpFile::AddRequestHeaders 并且用CHttpFile::SendRequest

Find一个文件

如果文件没找到返回FALSE

读文件

调用CInternetFile::Read

使用你提供的缓冲读指定的字节

获取HTTP请求信息

调用CHttpFile::QueryInfo

从服务器获取HTTP请求头信息

异常处理

利用CInternetException

处理所有普通的Internet异常类型

结束 HTTP 会话

处理CInternetSession对象

自动清除打开的句柄的连接

由于时间关系,我没有写本文的例子代码。不过MSDN里有两个简单的例子可以参考,一个是FTPTREE,另一个是TEAR。此外,也可以用“WinInet”作为关键字在google里搜一下也能找到一些使用MFC WinInet的技术信息。(完)

源文档 <http://www.vckbase.com/document/viewdoc/?id=546>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics