利用Win32的网络函数创建一个网络浏览器

上传人:876****10 文档编号:141967988 上传时间:2020-08-14 格式:DOCX 页数:13 大小:78.74KB
返回 下载 相关 举报
利用Win32的网络函数创建一个网络浏览器_第1页
第1页 / 共13页
利用Win32的网络函数创建一个网络浏览器_第2页
第2页 / 共13页
利用Win32的网络函数创建一个网络浏览器_第3页
第3页 / 共13页
利用Win32的网络函数创建一个网络浏览器_第4页
第4页 / 共13页
利用Win32的网络函数创建一个网络浏览器_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《利用Win32的网络函数创建一个网络浏览器》由会员分享,可在线阅读,更多相关《利用Win32的网络函数创建一个网络浏览器(13页珍藏版)》请在金锄头文库上搜索。

1、利用Win32的网络函数创建一个网络浏览器 作者: 日期:利用Win32的网络函数创建一个网络浏览器 介绍不通过网络,你就无法了解我的一个朋友。计算机杂志已经在internet上设置了电子期刊,而本地的报纸也已经把整个段落都放到了网络上。事实上,许多报纸都在联机。每个人都有一个主页,甚至一些无家可归的人都有一个主页。虽然有许多关于网络的消息难免言过其实,但网络正在变成计算机整体的一部分已经是无庸置疑的了。Microsoft 已经介绍了Microsoft Win32网络函数来协助开发者把网络变成他们的应用程序的整体部分。这些新的功能简化了使用FTP(文件传输协议)、和HTTP(超文本传输协议)访

2、问网络。使用Win32网络函数的开发者不需要对TCP/IP或Windows 配件。对于一些最普通的操作,开发者不需要知道他们正在使用的某个协议的细节。最终,Win32网络函数将成为Win32应用程序接口的一部分并且与基于Windows的不同的平台一起发布。最初,Win32网络函数将安装在一个叫做WININET.DLL的再分布式动态链接库里。(来自Microsoft网络软件开发工具包,其网址是:http:/ Win32网络函数的主题,可以了解到全部的细节。这篇文章是配合SurfBear样本应用程序而创作的。SurfBear是一个HTML文件。覆盖了这个过程种特定的网络部分,但它没有涉及与这个过程

3、有关的用户接口问题或HTML文件的显示或操作问题。注意:这篇文章是基于WININET.DLL一个相当早的版本。很可能其中的参数名、标识名和函数名发生了改变。但是函数的范围和意图应该还是和这篇文章中描述的是一致的。网络函数最好的探讨Win32网络函数的方法是直接进入代码。下面的代码是样本的代码,为了方便阅读,错误处理部分已经被删除掉了。HINTERNET hNet = :InternetOpen(MSDN SurfBear,PRE_CONFIG_INTERNET_ACCESS,NULL,INTERNET_INVALID_PORT_NUMBER,0) ;HINTERNET hUrlFile = :

4、InternetOpenUrl(hNet,http:/,NULL,0,INTERNET_FLAG_RELOAD,0) ;char buffer10*1024 ;DWORD dwBytesRead = 0;BOOL bRead = :InternetReadFile(hUrlFile,buffer,sizeof(buffer),&dwBytesRead);:InternetCloseHandle(hUrlFile) ;:InternetCloseHandle(hNet) ;上面列举的代码包括四个网络函数:InternetOpen、InternetOpenOrl、InternetReadFile和

5、InternetCloseHandle。下面我们依次对这些函数进行分析。InternetOpenInternetOpen初始化WININET.DLL。它在其他的Win32网络函数之前被调用。HINTERNET hNet = :InternetOpen(MSDN SurfBear, / 1 LPCTSTR lpszCallerNamePRE_CONFIG_INTERNET_ACCESS, / 2 DWORD dwAccessType, / 3 LPCTSTR lpszProxyNameINTERNET_INVALID_PORT_NUMBER, / 4 INTERNET_PORT nProxyPo

6、rt0 / 5 DWORD dwFlags) ;InternetOpen返回一个类型为HINTERNET的句柄。其他的Win32网络函数把这个句柄当作一个参数。现在你不能把一个HINTERNET句柄用在类似于ReadFile之类的其他Win32函数中。但是随着Microsoft Windows和Microsoft Windows NT网络支持的成熟,这一点在将来不是不可能实现的。当你已经结束使用Wein32网络函数时,你应该调用InternetCloseHandle释放InternetOpen分配的资源。使用Microsoft基础类(MFC)的应用程序将从文件的构造程序里象征性地调用Inter

7、netOpen。绝大多数应用程序都将在每一进程里调用InternetOpen。InternetOpen 的第一个参数lpszCallerName指定正在使用网络函数的应用程序。当HTTP协议使用时,这个名字将变成用户代理。第二个参数dwAccessType指定访问类型。在上面的例子里,PRE_CONFIG_INTERNET_ACCESS访问类型指示Win32网络函数使用登记信息去发现一个服务器。使用PRE_CONFIG_INTERNET_ACCESS需要正确设定登记信息。这里我耍了一个小花招并让网络开发者替我登记注册。如果你不想欺骗,你需要按图1所示设定登记信息。在登记注册中,把AccessT

8、ype设置为1,则意味着“直接入网”,把AccessType 设置为2,意味着“使用网关”。把DisableServiceLocation设置为1,将让它使用一个已经命名的服务器;否则将找到一个使用注册信息和名字决议(RNR)应用程序接口的服务器,它是Windows接口的一部分。其他的访问类型包括以下几种:LOCAL_INTERNET_ACCESS只连接到当地Internet网站。例如,如果我使用SurfBear标志,我就只能访问Microsoft整体的Internet网站。 CERN_PROXY_INTERNET_ACCESS使用一个CERN代理去访问web。CERN代理是一个充当网关的we

9、b服务器并且能向要使用代理的服务器发送HTTP请求。 GATEWAY_INTERNET_ACCESS允许连接到World Wide Web。我可以用这个访问类型去访问web上的任何站点。 GATEWAY_PROXY_INTERNET_ACCESS和CERN_PROXY_ACCESS访问类型要求第三个参数给InternetOpen:服务器名(lpszProxyName)。PRE_CONFIG_INTERNET_ACCESS不要求服务器名,因为他可以为服务器搜索寄存信息。NProxyPort参数用在CERN_PROXY_INTERNET_ACCESS中用来指定使用的端口数。使用INTERNET_I

10、NVALID_PORT_NUMBER相当于提供却省的端口数。最后一个参数棗dwFlags,设置额外的选择。你可以使用 INTERNET_FLAG_ASYNC标志去指示使用返回句句柄的将来的Internet函数将为回调函数发送状态信息,使用InternetSetStatusCallback进行此项设置。InternetOpenUrl一旦你把Win32网络函数初始化了,你就可以使用其他网络函数。下一个要调用的Internet 函数是InternetOpenUrl。这个函数连接到一个网络服务器上并且最被从服务器上读取数据。InternetOpenUrl能对FTP,Gopher或HTTP协议起作用。在

11、这篇文章中,我们只涉及HTTP协议。HINTERNET hUrlFile = :InternetOpenUrl(hNet, / 1 HINTERNET hInternetSessionhttp:/, / 2 LPCTSTR lpszUrlNULL, / 3 LPCTSTR lpszHeaders0, / 4 DWORD dwHeadersLengthINTERNET_FLAG_RELOAD, / 5 DWORD dwFlags0 / 6 DWORD dwContext) ;InternetOpenUrl也返回一个HINTERNET,它被传递给在这个URL(统一资源定位)上操作的函数。你应该使用

12、InternetClose来关闭这个句柄的处理。InternetOpenUrl的第一个参数hInternetSession是从InternetOpen返回的句柄。第二个参数lpszUrl是我们需要的资源的URL(统一资源定位)。在上面的例子中,我们想得到一个Microsoft的web主页。下面两个参数lpszHeaders和HeaderLength用来向服务器传送额外的信息。使用这些参数要求具有正在使用的特定协议的知识。DwFlag是一个可以用几种方式修改InternetOpenUrl行为的标志,InternetOpenUrl的行为包括关闭、隐藏,使原始数据可用和用存在的连接取代开辟一个新的连

13、接。最后一个参数dwContext是一个 DWORD上下文值。如果有一个值已经被指定,它将被送到状态回调函数。如果这个值是0,信息将不会被送到状态回调函数。InternetReadFile你打开一个文件后,就要读它,所以下一个函数是InternetReadFile是符合逻辑的:char buffer10*1024 ;DWORD dwBytesRead = 0;BOOL bRead = :InternetReadFile(hUrlFile, / 1 HINTERNET hFilebuffer, / 2 LPVOID lpBuffersizeof(buffer), / 3 DWORD dwNumb

14、erOfBytesToRead&dwBytesRead / 4 LPDWORD lpdwNumberOfBytesRead);bufferdwBytesRead = 0 ;pEditCtrl-SetWindowText(buffer) ;InternetReadFile接收InternetOpenUrl返回的句柄。它也对其他Win32网络函数,例如FtpOpenFile,FopherOpenFile和HttpOpenRequest返回的句柄有影响。剩下的InternetReadFile的三个参数也非常的明白直接。Inbuffer是指向保留数据的缓冲区的一个无返回值指针,dwNumberOfByteToRead以字节为单位指定缓冲区的尺寸。最后一个参数,lpdwNumbe

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号