二、方法与技巧(Tips & Knacks) | |
客户端的用户要实现某些行为,必须具备先决条件(如读取文件,就必须先建立一个Internet连接)。下表以MFC为例,列出了一般的Internet URL (FTP, Gopher, or HTTP)客户端行为要实现某个目标所必须使用的方法。 | |
实现 | 方法 |
建立一个连接 | 创建CInternetSession对象,它是WinInet Internet客户应用的基础 |
打开一个URL | 建立一个连接,调用CInternetSession::OpenURL 函数,返回一个只读资源对象 |
读取 URL 数据 | 打开一个URL,调用CInternetSession::QueryOption |
Query Internet 选项设置 | 建立一个连接,调用CInternetFile::Read |
设置Internet选项 | 建立一个连接,调用CInternetSession::SetOption |
设置一个函数获取状态信息 | 建立一个连接,调用CInternetSession::EnableStatusCallback 重写CInternetSession::OnStatusCallback函数 |
FTP | |
实现 | 方法 |
建立一个FTP连接 | 创建CInternetSession对象,它是WinInet Internet客户应用的基础。调用CInternetSession::GetFtpConnection 创建CFtpConnection对象 |
Find第一个资源 | 建立一个FTP连接,创建一个CFtpFileFind对象 OpenURL函数返回一个只读资源对象 调用CFtpFileFind::FindFile |
枚举所有可获得的资源 | Find下一个资源,调用CFtpFileFind::FindNextFile 直到返回FALSE |
打开一个FTP文件 | 建立一个FTP连接,调用CFtpConnection::OpenFile 创建并打开一个CInternetFile对象 |
读取FTP文件 | 以读方式打开FTP文件,调用CInternetFile::Read |
写FTP文件 | 以写方式打开FTP文件,调用CInternetFile::Write重写CInternetSession::OnStatusCallback |
改变客户端在服务器上的目录 | 建立一个FTP连接,调用CFtpConnection::SetCurrentDirectory |
获取客户端在服务器上的当前目录 | 建立一个FTP连接,调用CFtpConnection::GetCurrentDirectory |
HTTP | |
实现 | 方法 |
建立一个HTTP连接 | 创建CInternetSession对象,它是WinInet Internet客户应用的基础。调用CInternetSession::GetHttpConnection 创建CHttpConnection对象 |
打开一个HTTP文件 | 建立一个HTTP连接,调用CHttpConnection::OpenRequest 创建一个CHttpFile对象, 调用CHttpFile::AddRequestHeaders 调用CHttpFile::SendRequest |
读取一个HTTP文件 | 打开HTTP文件,调用CInternetFile::Read |
获取HTTP请求信息 | 建立一个HTTP连接,调用CHttpConnection::OpenRequest 创建一个CHttpFile对象 调用CHttpFile::QueryInfo |
GOPHER | |
实现 | 方法 |
建立一个gopher连接 | 创建CInternetSession对象,它是WinInet Internet客户应用的基础。调用CInternetSession::GetGopherConnection 创建CGopherConnection对象 |
在当前目录中Find第一个文件 | 建立一个gopher连接, 创建一个CGopherFileFind对象, 调用CGopherConnection::CreateLocator 创建一个CGopherLocator对象, 传递locator到CGopherFileFind::FindFile. 如果需要,调用CGopherFileFind::GetLocator 获取文件的locator |
枚举所有可获得的资源 | Find下一个资源,调用CFtpFileFind::FindNextFile 直到返回FALSE |
打开一个gopher文件 | 建立一个gopher连接,调用CFtpConnection::OpenFile 调用CGopherConnection::CreateLocator创建一个 gopher locator或者用CGopherFileFind::GetLocator find一个locator 调用CGopherConnection::OpenFile. |
读取gopher文件 | 打开gopher文件,调用CInternetFile::Read 使用CGopherFile |
每一个Internet client application的基础是Internet session。MFC将Internet session作为CInternetSession类的对象来实现。使用这个类,你可以创建一个或几个并发的CInternetSession类对象。 为了与服务器通讯,你不仅需要CInternetSession对象,还需要一个CInternetConnection对象。你可以通过CInternetSession::GetFtpConnection, CInternetSession::GetHttpConnection, 或CInternetSession::GetGopherConnection 来创建相应协议的CInternetConnection对象。这些调用并不存取服务器上的文件。如果你要读写服务器上的数据,必须在另外单独的步骤中打开文件。 对于大多数Internet sessions,CInternetSession对象一般都与一个CInternetFile对象肩并肩地工作。 对于一个Internet sessions,你必须创建一个CInternetSession实例。 如果你的Internet session要读写数据,你必须创建一个CInternetFile实例,或者其子类 CHttpFile,CGopherFile的实例。读数据最容易的方式是:调用CInternetSession::OpenURL。这个函数解析你提供的URL,打开一个到URL服务器的连接,并返回一个只读的CInternetFile对象,CInternetSession::OpenURL不用指定协议类型,那种协议(FTP, HTTP, gopher)都行。CInternetSession::OpenURL甚至可以操作本地文件(返回一个CStdioFile,而不是CInternetFile)。 如果你的Internet session不读写数据,而是实现其它任务,如在一个FTP目录中删除一个文件,你可以不必创建CInternetFile实例。 有两种方式来创建CInternetFile对象: |
目的 | 方法 | 结果 |
开始一个 Internet session | 创建一个 CInternetSession对象 | 初始化WinInet,并联接服务器 |
读或设置一个InternetQuery option (如超时或重试次数) | CInternetSession::SetOption | 不成功返回FALSE |
建立回调函数监视session状态 | 用CInternetSession::EnableStatusCallback | 建立回调函数CInternetSession::OnStatusCallback,重写OnStatusCallback,创建自己的回调例程 |
Internet服务器Intranet服务器或本地文件 | 用CInternetSession::OpenURL | 解析并打开到指定服务器的连接,返回CStdioFile(如果你传递的OpenURL是本地文件名)或CInternetFile对象,通过存取这个对象,获得服务器或文件的数据 |
读文件 | 用CInternetFile::Read | 用你提供的Buffer读指定的 字节数 |
异常处理 | 用CInternetException类 | 处理所有普通的Internet 异常类型 |
结束Internet session | 处理CInternetSession对象 | 自动清除打开的句柄的连接 |