本方法主要涉及以下四方面知识: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]下一页