网络编程 C++ ———WinInet

                                  


                                网络编程C++  ———WinInet


WinInet:

                一个Internet客户端程序的目的是通过Internet协议如:HTTP、FTP等来存取网络数据源(服务器)的信息。客户端程序可以访问服务器获得象天气预报,股票价格、重要新闻数据,甚至是与服务器交换信息。Internet客户端程序可以通过外部网络(Internet)或内部网络(一般为Intranet)访问服务器。
               为了开发Internet客户端程序。MFC类库提供了专门的 Win32 Internet 扩展接口,也就是WinInet。MFC将WinInet封装在一个标准的、易于使用的类集合中。在编写WinInet客户端程序时,你既可以直接调用Win32函数,也可以使用WinInet类库。
              Win32 Internet 扩展提供了对普通Internet协议的访问,这些协议包括:HTTP、FTP和Gopher。Gopher已经渐渐淡出。借助于WinInet编程接口,开发人员不必去了解Winsock、TCP/IP和特定Internet协议的细节就可以编写出高水平的Internet客户端程序。WinInet为所有几种协议(HTTP、FTP和Gopher)提供了统一的函数集,也就是Win32 API接口。利用这些统一的函数集,大大简化了针对HTTP、FTP等协议的编程,从而轻松地将Internet集成到自己的应用程序中。底层协议的转换(如从FTP到HTTP)只要对源代码稍作修改就可以完成。
               在Visual C++工程中提供有两种方式来使用WinInet。一种是直接调用Win32 Internet函数,另一种是使用WinInet类库。
               MFC对WinInet的封装是通过提供三个由CStdioFile派生类实现的。这三个派生类是:CInternetFile、 CHttpFile 和 CGopherFile。由于Gopher协议已经很少使用,所以本文将不再对CGopherFile进行讨论。对开发人员来说,不管你以前是否用过CStdioFile,WinInet都是很好理解并且易于使用的。它使得存取Internet数据易如反掌,使得Internet数据和本地数据的处理一致透明,数据的存储位置已经不再重要。

 

   MFC 提供了一些类和全程函数来创建客户端程序,涉及的类包括CInternetSession  、CInternetConnection、CFtpConnection、 CGopherConnection、CHttpConnection、CInternetFile、CGopherFile、CHttpFile、CFileFind、CFtpFileFind、CGopherFileFind、CGopherLocator和CInternetException 。除CFileFind在Afx.h声明之外,其余都在Afxinet.h中。

一般来说,使用WinInet的编程模型:

  •         创建CInternetSession 类对象,并初始化Internet会话。
  •         建立CInternetSession对象与服务器的连接。
  •        连接时通过调用CInternetSession::QueryOption 或CInternetSession::SetOption 查询或设置Internet请求选项;
  •        反馈当前数据处理的进程信息,调用OnStatusCallBack来处理。
  •        获取服务器的CInternetFile实例;
  •        得到服务器文件后,就可以通过文件对象的Read 、Write 函数读取;
  •        使用CInternetException类对象处理所有可能出现的常规Internet异常类型。

通过上述模型 ,可以得到WinInet 进行FTP 程序设计的步骤。

 

Ftp 程序设计步骤
目的方法结果
开始一个Ftp Session创建一个CInternetSession对象初始化WinInet并连接服务器
连接到Ftp ServerCInternetSession::GetFtpConnection返回一个CFtpConnection对象
CD到服务器的一个新目录CFtpConnection::SetCurrentDirectioryCD到服务器的一个新目录
Find第一个Ftp目录中的文件CFtpFileFind::FindFileFind第一个文件,没找到则返回False
Find下一个Ftp目录中的文件CFtpFileFind::FindNextFile()Find下一个文件,没找到则返回False
打开FindFile或FindNextFile
找到的文件进行读写
CFtpConnection::OpenFIle 用FindFile
或FindNextFile返回的文件名
打开FindFile或FindNextFile
找到的文件(用于读写)
返回一个CInternetFile对象
读写文件CInternetFile::Read /Write使用指定的缓冲写和读
异常处理用CInternetException 类处理所有普通的Internet异常类型
结束FtpSession处理CInternetSession对象自动清除打开的句柄连接

http 程序设计步骤
目的方法结果
开始一个Http Session创建一个CInternetSession对象初始化WinInet并连接服务器
连接到Http  ServerCInternetSession::GetHttpConnection返回一个CHttpConnection对象
打开一个Http请求CHttpConnection::OpenRequest返回一个CHttpFile对象
发送一个http 请求CHttpFile::AddRequestHeaders和
CHttpFileSendRequest
Find 一个文件,没找到则返回false
读文件CHttpFile使用提供的缓冲读写指定的字节
异常处理CInternetException处理所有普通的Internet异常类型
结束httpSession处理C自动清除打开的句柄连接


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值