资源描述:
《使用http协议和winsockapi实现webzip文件下载》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、使用http协议和winsockapi实现webzip文件下载本方法主要涉及以下四方面知识:html语言、yingyong/070413/″...″name=″...″target=″...″〉。其中参数href的值就是欲获取的url值。 2.下载。 在http协议中常用的请求方法有两种:get和post。本实现使用get方法。最简化的get请求包如下: get/index.htmhttp/1.1“/index.htm”表示客户端欲下载的文件路径;“http/1.1”表示协议版本。 程序生成get
2、请求包,在成功连接对应http/1.1”,而不是“get/index.htmhttp/1.1”。 具体程序和类(程序使用delphi3.0编制): 1.初始化1.formcreate(sender:tobject); var ultithread:=true; //置″支持多线程″为″真″ akeessagebox(′网络系统未准备′,′信息′,mb_ok); essagebox(′未提供网络接口′,′信息′,mb_ok); essagebox(′网络版本不被支持′,′信息′,mb_o
3、k); end; end; 2.文件下载线程。 tdoinate:=true; inheritedcreate(false); end; proceduretdownfilethread.execute; var mysocket:tsocket;myclient:tsockaddr; recvbuf:array[0..332]ofchar;mycmdstr:string; ptemp:pchar; myhandle,index_ch,reccount,i:integer;
4、begin//创建本地socket mysocket:=socket(af_i,sock_stream,0); if(mysocket=socket_error)thenbegin application.messagebox(′初始化失败!′,′信息′,mb_ok); exit; end;//生成连接主机的结构 myclient.sin_family:=af_i; myclient.sin_port:=htons(connectedport); //connectedport:全局变量,
5、记录连接端口号 strpcopy(recvbuf,getserverip(fileurl)); //getserverip(fileurl):返回服务器的ip myclient.sin_addr.s_addr:=i_addr(recvbuf);//连接服务器 if(connect(mysocket,myclient,sizeof(myclient))〈〉0)thenbegin closesocket(mysocket); exit; end;//发请求 if(q_useproxy=0)th
6、en mycmdstr:=′get′+extracturlpath(fileurl)+′http/1.1′ //extracturlpath(fileurl)返回相对url elsemycmdstr:=′get′+fileurl+′http/1.1′;//使用代理写全url strpcopy(recvbuf,mycmdstr); i:=length(mycmdstr); recvbuf[i]:=#13;inc(i);recvbuf[i]:=#10;inc(i); recvbuf[i]:=#1
7、3;inc(i);recvbuf[i]:=#10;inc(i); recvbuf[i]:=#0; send(mysocket,recvbuf,i,0); //发送请求读返回数据 reccount:=recv(mysocket,recvbuf,sizeof(recvbuf)-1,0);//判断是否成功 i:=0; ysocket);exit;end; //得到数据起始位置 ptemp:=strpos(recvbuf,#13+#10+#13+#10)+4; index_ch:=ptemp-r
8、ecvbuf; //建立下载目录 tryforcedirectories(extractfilepath(getfillocalpath(fileurl))); except end;//创建文件 deletefile(getfillocalpath(fileurl)); myhandle:=filecreate(getfillocalpath(fileurl));//如果未接收完则继续 yhandle,recv