使用http协议和winsockapi实现webzip文件下载【442字】
时间:2023-04-11 22:34 来源:毕业论文 作者:www.youerw.com 点击:次
本方法主要涉及以下四方面知识:html语言。http协议。winsock编程。多线程程序设计。 程序实现过程: 1。分析链接关系(限于篇幅,这里只介绍对锚标记〈a〉的分析)。 在html中〈a〉标记的基本语法为:〈ahref=″。。。″name=″。。。″t论文网arget=″。。。″〉。其中参数href的值就是欲获取的url值。 2。下载。 在http协议中常用的请求方法有两种:get和post。本实现使用get方法。最简化的get请求包如下: get/index。htmhttp/1。1 /index。htm“表示客户端欲下载的文件路径;http/1。1“表示协议版本。 程序生成get请求包,在成功连接对应web服务器的80或其它端口后,使用tcp协议的同步模式套接字发送请求包并等待返回信息。 服务器将返回一个应答包,大致如下: http/1。0200ok 。。。 [数据。。。] 第一行是应答信息。如果成功,服务器将返回http/1。0200ok“。 第三行是一个空行,用以分隔http包头和包体(数据)。 第四行开始就是以字节流的方式返回的数据。 如果使用http代理,则与上述有两点不同。 第一,连接时应连接代理服务器,而不是连接web服务器。 第二,在生成请求包时,下载文件的url必须写全url。对上例而言,请求应为gethttp://netsport/index。htmhttp/1。1“,而不是get/index。htmhttp/1。1“。 具体程序和类(程序使用delphi3。0编制): 1。初始化winsock。 proceduretform1。formcreate(sender:tobject); var wversionrequired:word; wsdata:twsadata; begin ismultithread:=true; //置″支持多线程″为″真″ wversionrequired:=makeword(2,0); casewsastartup(wversionrequired,wsdata)of//初始化winsock wsasysnotready: application。messagebox(′网络系统未准备′,′信息′,mb_ok); wsavernotsupported: application。messagebox(′未提供网络接口′,′信息′,mb_ok); wsaeinval: application。messagebox(′网络版本不被支持′,′信息′,mb_ok); end; end; 2。文件下载线程。 tdownfilethread=class(tthread) private fileurl:string; //记录文件的url protected procedureexecute;override; publicconstructorcreate(url:string); end; constructortdownfilethread。create(url:string); begin fileurl:=url; freeonterminate:=true; inheritedcreate(false); end; proceduretdownfilethread。execute; var [1][2]下一页 (责任编辑:qin) |