- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用http协议和winsockapi实现web.doc
使用http协议和winsockapi实现web
本方法主要涉及以下四方面知识:html语言、http协议、l中〈a〉标记的基本语法为:〈a href=″...″ name=″...″ target=″...″〉。其中参数href的值就是欲获取的url值。
2.下载。
在http协议中常用的请求方法有两种:get和post。本实现使用get方法。最简化的get请求包如下:
get /index.htm http/1.1
“/index.htm”表示客户端欲下载的文件路径;“http/1.1”表示协议版本。
程序生成get请求包,在成功连接对应 http/1.1”,而不是“get /index.htm http/1.1”。
具体程序和类(程序使用delphi3.0编制):
1.初始化1.formcreate(sender: tobject);
var
ultithread:=true;
//置″支持多线程″为″真″
akeessagebox(′网络系统未准备′,′信息′,mb_ok);
essagebox(′未提供网络接口′,′信息′,mb_ok);
essagebox(′网络版本不被支持′,′信息′,mb_ok);
end;
end;
2.文件下载线程。
tdoinate:=true;
inherited create(false);
end;
procedure tdoysocket:tsocket; myclient:tsockaddr;
recvbuf:array [0..332] of char; mycmdstr:string;
ptemp:pchar;
myhandle,index_ch,reccount,i:integer;
begin //创建本地socket
mysocket:=socket(af_i,sock_stream,0);
if (mysocket=socket_error) then begin
application.messagebox(′初始化失败!′,′信息′,mb_ok);
exit;
end; //生成连接主机的结构
myclient.sin_family:=af_i;
myclient.sin_port:=htons(connectedport);
// connectedport:全局变量,记录连接端口号
strpcopy(recvbuf,getserverip(fileurl));
// getserverip(fileurl):返回服务器的ip
myclient.sin_addr.s_addr:=i_addr(recvbuf); //连接服务器
if (connect(mysocket,myclient,sizeof(myclient))〈〉0) then begin
closesocket(mysocket);
exit;
end; //发请求
if (q_useproxy=0) then
mycmdstr:=′get ′+extracturlpath(fileurl)+′ http/1.1′
//extracturlpath(fileurl)返回相对url
else mycmdstr:=′get ′+fileurl+′ http/1.1′;//使用代理写全url
strpcopy(recvbuf,mycmdstr);
i:=length(mycmdstr);
recvbuf[i]:=#13; inc(i); recvbuf[i]:=#10; inc(i);
recvbuf[i]:=#13; 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-recvbuf;
//建立下载目录
try forcedirectories(extractfilepath(getfillocalpath(fileurl)));
excep
文档评论(0)