WinInet(1)

 
二、方法与技巧(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对象:
第一种:使用CInternetSession::OpenURL建立服务器连接,这个调用返回一个
CInternetFile对象。

第二种:use CInternetSession::GetFtpConnection, GetGopherConnection, 或
GetHttpConnection建立服务器连接,你必须调用CFtpConnection::OpenFile,
CGopherConnection::OpenFile, 或 CHttpConnection::OpenRequest,相应地返回
一个CInternetFile, CGopherFile, 或 CHttpFile对象,

在实现Internet client application时,你要判断是创建一个基于OpenURL的一般的Internet client,还是使用GetConnection函数之一创建一个指定协议的Internet client,根据这种判断,用不同的步骤来实现Internet client application。

下表显示了实现一个典型的Internet client application的步骤:


目的方法结果
开始一个
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对象 自动清除打开的句柄的连接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值