欢迎来到天天文库
浏览记录
ID:43776819
大小:1.33 MB
页数:45页
时间:2019-10-14
《网络编程实用教程 叶树华 高志红 网络编程实用教程_第6章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章WinInet编程WinInet是WindowsInternet扩展应用程序高级编程接口,是专为开发具有Internet功能的客户端应用程序而提供的。它有两种形式:WinInetAPI包含一个C语言的函数集(Win32Internetfunctions),MFCWinInet类层次则是对前者的面向对象的封装。6.1使用WinInetAPI的共性问题WinInetAPI的函数原型定义在Wininet.h头文件中,对应的函数实现在Wininet.lib库文件中。要想成功地编译使用WinInetAPI的应用程序,正在使用的C/C++的include目录
2、中必须有Wininet.h头文件,library目录中必须有Wininet.lib库文件。6.1.1WinInetAPI函数使用的HINTERNET句柄HINTERNET句柄是一种特殊的数据类型,是由少数WinInetAPI函数创建的,大多数WinInetAPI函数通过使用HINTERNET类型的句柄来实现它的操作,图6.1:各种HINTERNET句柄形成的树形体系结构6.1.2典型的操作流程和它们使用的句柄1.使用InternetOpenUrl直接打开因特网上指定的文件。图6.2依赖由InternetOpenUrl所创建句柄的三个函数2.FTP操作的
3、层级结构:(1)对FTP服务器的目录和文件进行操作图6.3对FTP服务器的目录和文件进行操作的流程(2)使用内存缓冲区来操作FTP服务器上的文件图6.4使用内存缓冲区来操作FTP服务器上的文件(3)查询FTP服务器上的文件图6.5查询FTP服务器上的文件6.1.3如何获取WinInetAPI函数执行的错误信息从函数的返回值来说,WinInetAPI主要有两种类型。一种函数的返回值类型是HINTERNET句柄型,一种函数的返回值类型是布尔型。应用程序可以根据函数执行后的返回值来判断函数的执行是否成功。对于前一种函数,当函数执行成功时,会返回一个有效的句柄
4、;当函数失败时,则返回NULL。对于后一种函数,当函数执行成功时,返回TRUE;当函数失败时,返回FALSE。在函数调用失败后,用户往往需要了解出错的具体原因,应用程序可以随即调用GetLastError函数来获取更具体的错误信息。6.1.4关于返回信息的缓冲区参数。许多WinInetAPI函数使用两个参数来向应用程序返回信息。lpszBuffer是指向数据缓冲区的指针(LPVOIDlpszBuffer),可以为NULL。lpdwBufferLength是指向缓冲区长度的指针(LPDWORDlpdwBufferLength),它在函数开始执行时指示缓冲
5、区的大小,不能为NULL。6.1.5WinInetAPI的异步操作模式为了使WinInet以异步方式操作,应用程序需要做四件事。(1)设置异步方式标志(2)设置非零的环境值(3)定义并实现一个状态回调函数(statuscallbackfunction)(4)为句柄注册有效的回调函数6.1.6回调函数的定义实现与注册1.回调函数的原型VOID(CALLBACK*INTERNET_STATUS_CALLBACK)(INHINTERNEThInternet,INDWORDdwContext,INDWORDdwInternetStatus,INLPVOIDlp
6、vStatusInformation,INDWORDdwStatusInformationLength);2.INTERNET_ASYNC_RESULT结构的定义此结构包含异步回调函数的结果。typedefstruct{DWORDdwResult;DWORDdwError;}INTERNET_ASYNC_RESULT,*LPINTERNET_ASYNC_RESULT;3.注册句柄的回调函数调用InternetSetStatusCallback函数可以建立回调函数与句柄的关联。INTERNET_STATUS_CALLBACKInternetSetStat
7、usCallback(INHINTERNEThInternet,ININTERNET_STATUS_CALLBACKlpfnInternetCallback);4.举例下面的例子给出了一个回调函数的例子,和一个调用InternetSetStatusCallback来注册回调函数的例子。//定义了一个回调函数,函数名是用户自己定义的。voidCALLBACKCInternet::InternetCallback(HINTERNEThInternet,//其它参数原样照抄DWORDdwcontext,DWORDdwInternetStatus,LPVOID
8、lpvStatusInformation,DWORDdwStatusInformationLe
此文档下载收益归作者所有