使用WinInet类有许多优越之处,它提供了对Gopher、HTTP、FTP等公共Internet协议的访问方法,其中包括:
1) CInternetSession
2) CInternetConnection
3) CInternetFile
4) CHttpConnection
5) CGopherFile
6) CGopherConnection
7) CFtpConnection
8) CFileFind
9) CFtpFileFind
10) CGopherFileFind
11) CGopherLocator
12) CInternetException
使用WinInet类编程方法如下:
1. 创建CInternetSession类对象,创建并初始化Internet会话。
2. 建立CInternetSession对象与服务器的连接。该连接由CInternetConnect对象代表;可以通过CInternetSession::GetHttpConnection、CInternetSession::GetFTPConnection、CInternet::GetGopherConnection函数分别打开对应于三种特定协议的连接,它们分别由CInternetConnection的派生类CHttpConnection、CFtpConnection和CGopherConnection对象代表。
3. 在连接时,可以通过调用CInternetSession::QueryOption或CInternetSession::SetOption函数查询或设置Internet请求选项。
4. 客户应用程序在进行某些操作时,要耗费相当长的时间,因此有必要向用户反馈当前数据处理的进程信息。这就需要派生自己的CInternetSession对象,重载OnStatusCallback函数实现回调程序的功能,并调用CInternetSession::EnableStatusCallback函数允许使用回调程序以监视会话的状态。
5. 以上几个步骤建立了客户应用程序的工作环境,但它们并没有对服务器进行任何操作,必须在此基础上实现客户应用程序的实际功能。通常客户应用程序的主要功能是处理服务器的数据,因此应该获得服务器的CInternetFile实例,可以通过两种方法创建该实例:
1) 分别调用CGopherConnection::OpenFile、CFtpConnection::OpenFile和CHttpConnection::OpenRequest函数得到CInternetFile、CGopherFile和CHttpFile对象指针,其中CGopherFile和CHttpFile是CInternetFile和派生类,对于FTP直接使用基类CInternetFile,此外CHttpConnection、CFtpConnection和CGopherConnection对象由步骤2创建。
2) 另外一种更简单的方法是:无需通过步骤2建立连接,直接通过调用CInternetSession::OpenURL,该函数解析指定的URL,建立与由URL所代表的服务器之间的连接,然后返回一个只读的CInternetFile对象。该函数并不局限于某个特定的协议类型,它能够处理任何FTP URL、HTTP URL、Gopher URL或本地文件。
6. 得到服务器文件后,就可以通过调用文件对象的Read函数和Write函数读取或写入文件。正如前面所讲,对于FTP,所使用的文件对象为CInternetFile类,而HTTP和Gopher则使用CInternetFile的派生类CHttpFile和CGopherFile类对象。
7. 为了提高程序的容错性和稳定性,对可能出现的问题进行处理是非常有必要的。对于Internet客户,需要使用CInternetException类对象处理所有可知的常规的Internet异常类型。
8. 结束Internet会话,销毁CInternetSession对象。