首页 >> 民生教育

编程中协议应用

民生教育  2021-08-24 13:36 字号: 大 中 小

Http协议的通信遵循一定的约定.例如,请求一个文件的时候先发送Get请求,然后服务器会返回请求的数据.如果需要进行断点传输,那么先发送\'HEAD /\'请求,其中返回的\'Content-Length: \'就是文件实际大小.将其和我们本地需要断点下载的文件大小比较,发送GET请求和发送需要下载的文件开始位置\'RANGE: bytes=\'+inttostr(iFilePos)+\'-\'+#13#10;服务器如果支持断点下载的话就会接着发送余下的数据了.因为这方面的文章比较多,我在这里就不详细讲述了.感兴趣的朋友可以自行查阅相关资料或者RFC文档。

当然,如果你是个懒人,也可以直接采用Delphi自带的控件.以Delphi6的INDY组件为例.新建一个工程,放上一个TIdHTTP控件,一个TIdAntiFreeze控件,一个TProgressBar用于显示下载进度.最后放上一个TButton用于开始执行我们的命令.代码如下:

procedure tton1Click(Sender: TObject);//点击按钮的时候开始下载我们的文件

var

MyStream:TMemoryStream;

begin

lyWhenIdle:=False;//设置使程序有反应.

MyStream:=eate;

try

t(\'\',MyStream);//下载我站点的一个ZIP文件

except//INDY控件一般要使用这种try..except结构.

Showmessage(\'络出错!\');

ee;

Exit;

end;

veToFile(\'c:\\p\');

ee;

Showmessage(\'OK\');

end;

procedure HTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;

const AWorkCountMax: Integer);//开始下载前,将ProgressBar1的最大值设置为需要接收的数据大小.

三河燕达健康城进入设备安装、人员招培阶段 begin

x:=AWorkCountMax;

n:=0;

sition:=0;

end;

procedure HTTP1Work(Sender: TObject; AWorkMode: TWorkMode;

const AWorkCount: Integer);//接收数据的时候,进度将在ProgressBar1显示出来.

begin

sition:=sition+AWorkCount;

end;

IdHTTP1的Get还有一种形式就是获取字符串:例如,上面的程序可以改写成:

procedure tton1Click(Sender: TObject);

var

MyStr:String;

begin

lyWhenIdle:=False;//设置使程序有反应.

try

MyStr:=t(\'\');

except

Showmessage(\'络出错!\');

Exit;

end;

Showmessage(MyStr);

end;

应用:现在很多程序都有自动升级功能,实际上就是应用了GET.先在自己站点放一个文本文件注明程序版本号,当检查升级的时候,取文本内容与当前版本号比较,然后决定升级与否.

肾功能不全高血压能治好吗
杭州好医院白癜风
武汉哪医院妇科好
推荐资讯