网络编程实用教程_第4章.ppt
《网络编程实用教程_第4章.ppt》由会员分享,可在线阅读,更多相关《网络编程实用教程_第4章.ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、吉林大学软件学院吉林大学软件学院第第4章章 WinInet编程编程lWinInet是是WindowsInternet扩扩展展应应用用程程序序高高级级编编程程接接口口,是是专专为为开开发发具具有有Internet功功能能的的客客户户端端应应用程序而提供的。用程序而提供的。lWinInet有两种形式:有两种形式:lWinInet API包含一个C语言的函数集(Win32Internetfunctions);lMFCWinInet类层次则是对前者的面向对象的封装。lWinInet支持支持FTP、HTTP、Gopher协议协议。l使使用用WinInet可可以以使使客客户户端端应应用用程程序序轻轻松松地
2、地与与这这三三种服种服务务器通信,而无需考器通信,而无需考虑虑底底层层通信通信细节细节。吉林大学软件学院吉林大学软件学院4.1使用使用WinInetAPI的共性问题的共性问题l使用WinInetAPI,应用程序可以与Internet服务器建立连接、查询或接收服务器文件、向服务器发送文件、打开服务器上的文件,等等。l进行操作时可以使用同步方式或异步方式。lWinInetAPI的函数原型定义在的函数原型定义在Wininet.h头文件头文件中,对应的函数实现在中,对应的函数实现在Wininet.lib库文件中。库文件中。l要想成功地编译使用要想成功地编译使用WinInetAPI的应用程序的应用程序,
3、正正在使用的在使用的C/C+的的include目录中必须有目录中必须有Wininet.h头文件,头文件,library目录中必须有目录中必须有Wininet.lib库文件。库文件。吉林大学软件学院吉林大学软件学院4.1.1WinInetAPI函数使用的函数使用的HINTERNET句柄句柄lHINTERNET句柄是一种特殊的数据类型,由少数句柄是一种特殊的数据类型,由少数WinInetAPI函数创建,大多数函数创建,大多数WinInetAPI函数通过函数通过使用使用HINTERNET类型的句柄来实现函数的操作。类型的句柄来实现函数的操作。lHINTERNET句柄可以代表句柄可以代表Interne
4、t会话,也可以代会话,也可以代表应用程序与表应用程序与Internet上特定服务器的连接,还可以上特定服务器的连接,还可以代表各种打开的文件或查询结果。代表各种打开的文件或查询结果。lHINTERNET句柄与普通的句柄与普通的Win32句柄相似。句柄相似。l区别在于处于不同层次的区别在于处于不同层次的HINTERNET句柄形成了一句柄形成了一个树形体系,且只有少数函数能够创建个树形体系,且只有少数函数能够创建HINTERNET句柄。句柄。吉林大学软件学院吉林大学软件学院图图4.1各种各种HINTERNET句柄形成的句柄形成的树树形体系形体系结结构构吉林大学软件学院吉林大学软件学院l各种各种HI
5、NTERNET句柄都有相应的数据结构,记录句句柄都有相应的数据结构,记录句柄的属性信息,并提供通过该句柄可以实现的操作。柄的属性信息,并提供通过该句柄可以实现的操作。l下层句柄是由上层句柄派生出来的,下层句柄继承上下层句柄是由上层句柄派生出来的,下层句柄继承上层句柄的属性。层句柄的属性。l当用户调用当用户调用InternetCloseHandle函数来关闭一个句柄函数来关闭一个句柄时,由该句柄派生的所有下层句柄都将被关闭。时,由该句柄派生的所有下层句柄都将被关闭。lHINTERNET句柄有许多选项,这些选项决定了句柄句柄有许多选项,这些选项决定了句柄的行为和属性,如句柄的操作方式、超时设置、异
6、步的行为和属性,如句柄的操作方式、超时设置、异步操作时的回调函数、环境上下文操作时的回调函数、环境上下文ID、缓冲区大小等。、缓冲区大小等。l句柄的类型不同,选项也不同。应用程序可以调用句柄的类型不同,选项也不同。应用程序可以调用InternetQueryOption函数来查询句柄的选项设置,调函数来查询句柄的选项设置,调用用InternetSetOption函数来改变句柄的选项设置。函数来改变句柄的选项设置。吉林大学软件学院吉林大学软件学院图图4.2依依赖赖由由InternetOpenUrl所所创创建句柄的三个函数建句柄的三个函数4.1.2典型的操作流程和它们使用的句柄典型的操作流程和它们使
7、用的句柄1.使用使用InternetOpenUrl直接打开因特网上指定的文件直接打开因特网上指定的文件2FTP操作的操作的层级结层级结构构(1)(1)对对对对FTPFTP服服服服务务务务器的目器的目器的目器的目录录录录和文件和文件和文件和文件进进进进行操作行操作行操作行操作图图4.3对对FTP服服务务器的目器的目录录和文件和文件进进行操作行操作的流程的流程(2)(2)使用内存使用内存使用内存使用内存缓缓缓缓冲区来操作冲区来操作冲区来操作冲区来操作FTPFTP服服服服务务务务器上的文件器上的文件器上的文件器上的文件.图图4.4使用内存使用内存缓缓冲区来操作冲区来操作FTP服服务务器上的文件器上的
8、文件(3)(3)查询查询查询查询FTPFTP服服服服务务务务器上的文件器上的文件器上的文件器上的文件图图4.5查询查询FTP服服务务器上的文件器上的文件4.1.3如何获取如何获取WinInetAPI函数执行的错误信息函数执行的错误信息l从从函函数数的的返返回回值值来来说说,WinInetAPI主主要要有有两两种种类类型。型。l一种函数的返回值类型是HINTERNET句柄型;l一种函数的返回值类型是布尔型。l应应用用程程序序可可以以根根据据函函数数执执行行后后的的返返回回值值来来判判断断函函数数的的执执行是否成功。行是否成功。l对于前一种函数,当函数执行成功时,返回一个有效的句柄;当函数失败时,
9、则返回NULL。l对于后一种函数,当函数执行成功时,返回TRUE;当函数失败时,返回FALSE。l在函数在函数调调用失用失败败后,用后,用户户往往需要了解出往往需要了解出错错的具体的具体原因,原因,应应用程序可以随即用程序可以随即调调用用GetLastError函数函数来来获获取更具体的取更具体的错误错误信息。信息。吉林大学软件学院吉林大学软件学院4.1.4关于返回信息的缓冲区参数关于返回信息的缓冲区参数l许多许多WinInetAPI函数使用两个参数来向应用程序函数使用两个参数来向应用程序返回信息。返回信息。llpszBuffer是指向数据缓冲区的指针(LPVOIDlpszBuffer),可以
10、为NULL。llpdwBufferLength是指向缓冲区长度的指针(LPDWORDlpdwBufferLength),它在函数开始执行时指示缓冲区的大小,不能为NULL。吉林大学软件学院吉林大学软件学院l函数执行完毕时,作为函数的出口参数,返回一个长函数执行完毕时,作为函数的出口参数,返回一个长度可变的信息。度可变的信息。l若调用成功若调用成功llpszBuffer指向的缓冲区中存储着返回的信息内容。llpdwBufferLength所指的双字就被设置为实际存入缓冲区的数据的字节长度。l若若lpszBuffer指针为指针为NULL,或,或lpdwBufferLength指示指示的缓冲区大小不
11、足以容纳返回的数据,函数调用将失的缓冲区大小不足以容纳返回的数据,函数调用将失败,并在函数返回时将败,并在函数返回时将lpdwBufferLength所指的值设所指的值设置为接受返回数据所需的缓冲区字节数。置为接受返回数据所需的缓冲区字节数。l用户可以使用这个返回值,重新分配一个更大的缓冲区,并重新调用函数。4.1.5WinInetAPI的异步操作模式的异步操作模式lWinInetAPI的的函函数数在在进进行行I/O操操作作时时,默默认认的的方方式式是是同同步步操操作作,即即对对于于每每一一个个不不能能及及时时完完成成的的I/O操操作作,会会一直等下去,直到操作完成。一直等下去,直到操作完成。
12、l异异步步操操作作,无无论论成成功功与与否否函函数数调调用用都都会会立立即即返返回回,这这样样就就允允许许一一个个单单线线程程的的应应用用程程序序最最充充分分地地利利用用CPU,而不必等待网络而不必等待网络I/O的完成。的完成。l当调用异步操作模式的函数时,应检查返回值。当调用异步操作模式的函数时,应检查返回值。l若 函 数 调 用 返 回 FALSE或 NULL,并 且 调 用GetLastError返回一个ERROR_IO_PENDING错误,说明该函数调用已经异步的完成了。l并 且 当 函 数 执 行 完 毕 时,会 使 用INTERNET_STATUS_REQUEST_COMPLETE
13、状 态码来自动的调用应用程序的回调函数。吉林大学软件学院吉林大学软件学院l为为了了使使WinInet以以异异步步方方式式操操作作,应应用用程程序序需需要要做做四件事。四件事。设置异步方式标志l在调用InternetOpen函数来创建Inernet根句柄时,将参数dwFlags设置为INTERNET_FLAG_ASYNC异步标志。l这表示接下来针对根句柄及其派生句柄的操作都以异步方式进行。l任何调用在异步结束后均返回一个对话句柄或由此而派生的句柄。吉林大学软件学院吉林大学软件学院设置非零的环境值lWinInet中创建句柄的函数都有一个称为环境值的入口参数,名字总是dwContext。l如果要求针
14、对某个句柄的函数以异步的方式来操作,在调用创建该句柄的函数时,对dwContext参数必须指定一个非零的环境值。l如果把环境值指定为0,即使在上一步操作中设置了INTERNET_FLAG_ASYNC标志,依赖该句柄的函数也只能以同步方式来操作。定义并实现一个状态回调函数(statuscallbackfunction)l对于长时间操作的WinInet函数,回调函数可以给应用程序返回一些关于操作进展情况的反馈,并主要是与网络操作有关的情况。leg:解析了一个域名、正在连接服务器、正在接收数据l异步操作完成时将调用回调函数,给出某种指示.lINTERNET_STATUS_HANDLE_CLOSING
15、是是对对于于一一个个句句柄最后做的状态指示;柄最后做的状态指示;lINTERNET_STATUS_HANDLE_CREATED是是当当句句柄柄初初始创建时的指示;始创建时的指示;lINTERNET_STATUS_REQUEST_COMPLETE是是当当一一个个异步操作完成时的指示。异步操作完成时的指示。l当当接接收收到到一一个个INTERNET_STATUS_REQUEST_COMPLETE指指示示时时,应应用用程程序序必必须须检检查查INTERNET_ASYNC_RESULT结结构,来决定操作是成功还是失败。构,来决定操作是成功还是失败。为句柄注册有效的回调函数l通过调用InternetSe
16、tStatusCallback函数可以建立一个回调函数与一个句柄的关联,称为注册。l一旦建立了这种关联,所有对于这个句柄的异步操作就都调用这个回调函数,产生状态指示,汇报函数的操作情况。l回调函数被该句柄派生的句柄继承,对于其派生句柄的异步操作也都将调用这个回调函数。l使用InternetSetStatusCallback函数也可以改变一个句柄关联的回调函数,但是改变了一个句柄关联的回调函数并不改变其派生句柄的关联回调函数.l异步操作在调用回调函数时,会将所操作的句柄创建时指定的非零环境值,以及对这个句柄操作的状态指示等信息,作为入口参数传递给回调函数,利用传入的环境值,可以核查向回调函数产生
17、调用的操作,从而判别出这此回调是哪个异步操作引起的,进而做出不同的处理。吉林大学软件学院吉林大学软件学院4.1.6回调函数的定义实现与注册回调函数的定义实现与注册1回调函数的原型回调函数的原型VOID(CALLBACK*INTERNET_STATUS_CALLBACK)(INHINTERNEThInternet,INDWORDdwContext,INDWORDdwInternetStatus,INLPVOIDlpvStatusInformation,INDWORDdwStatusInformationLength);吉林大学软件学院吉林大学软件学院2INTERNET_ASYNC_RESULT结
18、构的定义结构的定义l此结构包含异步回调函数的结果。typedefstructDWORDdwResult;DWORDdwError;INTERNET_ASYNC_RESULT,*LPINTERNET_ASYNC_RESULT;吉林大学软件学院吉林大学软件学院3注册句柄的回调函数注册句柄的回调函数l调用InternetSetStatusCallback函数可以建立回调函数与句柄的关联。INTERNET_STATUS_CALLBACKInternetSetStatusCallback(INHINTERNEThInternet,ININTERNET_STATUS_CALLBACKlpfnInterne
19、tCallback);4举例举例l l下下面面给给出出了了一一个个回回调调函函数数的的例例子子,和和一一个个调调用用InternetSetStatusCallbackInternetSetStatusCallback来注册回调函数的例子来注册回调函数的例子./定定义义了一个回了一个回调调函数,函数名是用函数,函数名是用户户自己定自己定义义的。的。voidCALLBACKCInternet:InternetCallback(HINTERNEThInternet,/其它参数原其它参数原样样照抄照抄DWORDdwcontext,DWORDdwInternetStatus,LPVOIDlpvStatu
20、sInformation,DWORDdwStatusInformationLength)/在在这这里插入回里插入回调调函数的函数的实现实现代代码码。.;/定定义义INTERNET_STATUS_CALLBACK型的型的变变量量INTERNET_STATUS_CALLBACKdwISC;/建立句柄与回建立句柄与回调调函数的关函数的关联联dwISC=InternetSetStatusCallback(hInternet,(INTERNET_STATUS_CALLBACK)InternetCallback);吉林大学软件学院吉林大学软件学院4.2使用使用WinInetAPI编制编制FTP客户程序客户
21、程序的要点的要点4.2.1一般步骤一般步骤lFTP客客户户端端应应用程序的一般步用程序的一般步骤骤是:是:1.调 用 InternetAttemptConnect函 数 测 试 主 机 与Internet的连接状态;2.调用InternetOpen函数,创建HINTERNET会话根句柄;3.创建FTP会话句柄,调用函数时需要服务器名、FTP端 口 号、用 户 名 和 口 令,设 置INTERNET_SERVICE_FTP标志,若将端口号设置为HINTERNT_INVALID_PORT_NUMBER,则使用默认端口号;4.对于FTP服务器执行需要的操作:4.对对于于FTP服服务务器器执执行需要的
22、操作:行需要的操作:搜寻并列举FTP服务器上的文件和目录l使用FtpFindFirstFile和InternetFindNextFile函数。查知或改变FTP服务器的当前目录l使用FtpGetCurrentDirectory和FtpSetCurrentDirectory函数。操作服务器上的目录l使用FtpCreateDirectory和FtpRemoveDirectory函数.下载FTP服务器中的文件l使用FtpOpenFile和InternetReadFile函数下载和上传文件l使用FtpGetFile和FtpPutFile函数。吉林大学软件学院吉林大学软件学院4.2.2搜寻并列举搜寻并列举
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 实用教程
限制150内