⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 un_filedown.pas

📁 局域网的一个聊天程序
💻 PAS
字号:
unit Un_filedown;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
  ComCtrls;

type

TfiledownThread = class(TThread)
  private
  public
   server:string;
   serverfile:string;
   localfile:string;
   start_p:integer;
   end_p:integer;
   procedure Execute; override;
  end;




  Tform_filedown = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    pb: TProgressBar;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    function getfile(server:string;serverfile:string;localfile:string;start_p:integer;end_p:integer):bool;
  end;

var
  form_filedown: Tform_filedown;

implementation

uses Un_main;

{$R *.dfm}

{ Tform_filedown }

function Tform_filedown.getfile(server:string;serverfile:string;localfile:string; start_p,
  end_p: integer): bool;
var
udpc:Tidudpclient;
size:integer;
buf:Tfilebuf;
i:integer;
cnt:integer;
tocnt:integer;
f:Tfilestream;
begin
 udpc:=Tidudpclient.Create(nil);
 udpc.Host:=server;
 udpc.Port:=3001;
 udpc.ReceiveTimeout:=3000;
 udpc.Send('file'+#13#10+serverfile+#13#10+'1');
 zeromemory(@buf,sizeof(buf));
 udpc.ReceiveBuffer(buf,sizeof(buf));
 if buf.pos<>0 then
  begin
   size:=buf.size;
   cnt:=(size div sizeof(buf.buf))+1;
   if not fileexists(localfile) then
    f:=Tfilestream.Create(localfile,fmCreate)
   else
    f:=Tfilestream.Create(localfile,fmOpenWrite);
   f.Position:=(start_p-1)* sizeof(buf.buf); 
   if (end_p=0) or (end_p>cnt) then
    tocnt:=cnt
   else
    tocnt:=end_p;
   pb.Position:=0;
   pb.Max:=tocnt-start_p+1;
   for i:=start_p to tocnt do
    begin
     pb.Position:=pb.Position+1;
     zeromemory(@buf,sizeof(buf));    
     udpc.Send('file'+#13#10+serverfile+#13#10+inttostr(i));
     udpc.ReceiveBuffer(buf,sizeof(buf));
     if buf.pos=0 then
      begin
       showmessage('readtimeout!');
       break;
      end;
     if not ((i=tocnt) and (cnt=tocnt)) then
      begin
       f.Write(buf.buf,sizeof(buf.buf));
      end
     else
      begin
       f.Write(buf.buf,(size mod sizeof(buf.buf)));
      end;
     application.ProcessMessages;
    end;
   f.Destroy;
  end
 else
  begin
  end;
 udpc.Destroy;
end;

procedure Tform_filedown.Button1Click(Sender: TObject);
begin
label1.Caption:=datetimetostr(now);
  getfile(edit1.Text,edit2.Text,edit3.Text,strtoint(edit4.Text),strtoint(edit5.Text));
label2.Caption:=datetimetostr(now);
end;

{ TfiledownThread }

procedure TfiledownThread.Execute;
begin
  inherited;
  form_filedown.getfile(server,serverfile,localfile,start_p,end_p);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -