用WinInet开发Internet客户端应用指南

来源:互联网 发布:西门子编程电缆通讯 编辑:程序博客网 时间:2024/05/16 14:23

文章来源:http://www.cnblogs.com/zdxster/archive/2011/01/27/1945899.html

实现步骤

大家知道,每个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::SetCurrentDirectoryCD到FTP服务器的一个
新目录Find 第一个FTP目录中的文件创建一个CFtpFileFind对象,调用CFtpFileFind::FindFile,OpenURL函数返回一个只读资源对象;调用CFtpFileFind::FindFileFind第一个文件,如果文件每找到返回FALSE枚举所有可获得的资源,Find下一个FTP目录中的文件Find下一个资源,调用CFtpFileFind::FindNextFile直到返回FALSE。Find下一个文件
如果文件没找到返回FALSE打开FindFile或FindNextFile找到的文件(用于读写)调用CFtpConnection::OpenFile,参数为FindFile或FindNextFile返回的文件名 ,创建并打开一个CInternetFile对象打开FindFile或FindNextFile找到的文件(用于读写),返回一个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::GetCurrentDirectory或CFtpConnection::GetCurrentDirectoryAsURL返回目录名字
服务器目录或返回目录的URLCD(改变目录)到 FTP 服务器的一个新目录用CFtpConnection::SetCurrentDirectoryCD到FTP服务器的一个
新目录Find 第一个FTP目录中的文件用CFtpFileFind::FindFileFind第一个文件,如果文件每找到返回FALSEFind 下一个FTP目录中的文件用CFtpFileFind::FindNextFileFind下一个文件
如果文件没找到返回FALSE删除FindFile或FindNextFile找到的文件用CFtpConnection::Remove用FindFile或FindNextFile返回的文件名删除FindFile或FindNextFile
找到的文件异常处理用CInternetException类处理所有普通的Internet异常类型结束FTP session处理CInternetSession对象自动清除打开的句柄的连接


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

目的方法结果开始HTTP会话,建立HTTP连接创建 CInternetSession对象,调用CInternetSession::GetHttpConnection
创建CHttpConnection对象初始化WinInet并联接服务器,返回一个CHttpConnection对象创建一个 HTTP 请求调用CHttpConnection::OpenRequest
创建一个CHttpFile对象;返回一个CHttpFile对象发送一个HTTP 请求用CHttpFile::AddRequestHeaders 并且用CHttpFile::SendRequestFind一个文件
如果文件没找到返回FALSE读文件调用CInternetFile::Read使用你提供的缓冲读指定的字节获取HTTP请求信息调用CHttpFile::QueryInfo从服务器获取HTTP请求头信息异常处理利用CInternetException类处理所有普通的Internet异常类型结束 HTTP 会话处理CInternetSession对象自动清除打开的句柄的连接

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

0 0