{本源码是自由程序,你可以把它用在任何地方,但不允许以任何形式把它单独用作商业用途。本人是一个普通的打工仔,为了给朋友们献上更好的源码和控件,我需要你的支持,如果你认为本程序对你有帮助,希望你寄任意你愿意数额的RMB给我以资鼓励和支持,如果你认为不值,也希望你寄一张PostCard或者一封Email对我予以支持。深圳市福田区联合广场41楼恒星威电子有限公司GPS部 艾真保 收 518026mailto:[email protected]: http://www.aidelphi.com} unit UnitServer;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle, IdAntiFreezeBase, IdAntiFreeze, Gauges;type TFormServer = class(TForm) IdUDPServer1: TIdUDPServer; SaveDialog1: TSaveDialog; Gauge1: TGauge; procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;ABinding: TIdSocketHandle); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FileName:String; FileSize:Integer; Mem:TFileStream; { Private declarations } public { Public declarations } end;var FormServer: TFormServer;implementation{$R *.dfm}procedure TFormServer.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); Var Str:String; begin AData.Seek(0,0); SetLength(Str,AData.Size); AData.Read(Str[1],AData.Size); if Pos('Send file:File Name:',Str)>0 then begin Delete(Str,1,Length('Send file:File Name:')); FileName:=Str; Str:='Recived File Name OK!'; ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str)); end else if Pos('Send File:File Length:',Str)>0 then begin Delete(Str,1,Length('Send File:File Length:')); FileSize:=StrToIntDef(Str,0); SaveDialog1.FileName:=FileName; if SaveDialog1.Execute then begin FileName:=SaveDialog1.FileName; if FileExists(FileName) then DeleteFile(FileName); if Mem<>nil then begin Mem.Free; Mem:=nil; end; if not FileExists(FileName) then Mem:=TFileStream.Create(FileName,fmOpenReadWrite or fmCreate) else Mem:=TFileStream.Create(FileName,fmOpenReadWrite); Str:='Recived File Length OK!'; ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str)); end else begin Str:='Recived File Length Cancel!'; ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str)); end; end else if Pos('Send File:File End!',Str)>0 then begin if Mem<>nil then begin Mem.Free; Mem:=nil; Str:='Recived File OK!'; ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str)); end; FileName:=''; FileSize:=0; end else begin if Mem<>nil then begin Mem.Seek(0,2); AData.Seek(0,0); Mem.CopyFrom(AData,AData.Size); Gauge1.Progress:=Round(Mem.Size/FileSize*100); Str:='Recived File Package OK!'; ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str)); Application.ProcessMessages; end; end; end;procedure TFormServer.FormCreate(Sender: TObject); begin IdUDPServer1.Active:=True; FileName:=''; FileSize:=0; Mem:=nil; end;procedure TFormServer.FormDestroy(Sender: TObject); begin if Mem<>nil then Mem.Free; end;end.
{本源码是自由程序,你可以把它用在任何地方,但不允许以任何形式把它单独用作商业用途。本人是一个普通的打工仔,为了给朋友们献上更好的源码和控件,我需要你的支持,如果你认为本程序对你有帮助,希望你寄任意你愿意数额的RMB给我以资鼓励和支持,如果你认为不值,也希望你寄一张PostCard或者一封Email对我予以支持。深圳市福田区联合广场41楼恒星威电子有限公司GPS部 艾真保 收 518026mailto:[email protected]: http://www.aidelphi.com} unit UnitClient;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, IdAntiFreezeBase, IdAntiFreeze, Gauges;type TFormClient = class(TForm) IdUDPClient1: TIdUDPClient; Edit1: TEdit; Label1: TLabel; Button1: TButton; OpenDialog1: TOpenDialog; Gauge1: TGauge; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var FormClient: TFormClient;implementation{$R *.dfm}procedure TFormClient.Button1Click(Sender: TObject); Var ReceivedString:String; Mem:TFileStream; p:Array[0..1023] of byte; Posi,Len:Integer; begin if OpenDialog1.Execute then begin IdUDPClient1.Host:=Edit1.Text; IdUDPClient1.Active:=True; IdUDPClient1.Send('Send file:File Name:'+OpenDialog1.FileName); ReceivedString := IdUDPClient1.ReceiveString(); if UpperCase(ReceivedString)='RECIVED FILE NAME OK!' then begin Mem:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead); try Posi:=0; IdUDPClient1.Send('Send File:File Length:'+IntToStr(Mem.Size)); ReceivedString := IdUDPClient1.ReceiveString(); if UpperCase(ReceivedString)='RECIVED FILE LENGTH OK!' then begin While Posi<Mem.Size do//一次只发1024个字节,字节数不能太多,不过应该还可以增加一些. begin Len:=1024; if Mem.Size-Posi<1024 then Len:=Mem.Size-Posi; Mem.Read(p,Len); IdUDPClient1.SendBuffer(P,Len); Inc(Posi,Len); Gauge1.Progress:=Round(Posi/Mem.Size*100); ReceivedString := IdUDPClient1.ReceiveString(); if UpperCase(ReceivedString)<>'RECIVED FILE PACKAGE OK!' then Break; Application.ProcessMessages; end; IdUDPClient1.Send('Send File:File End!'); end else ShowMessage('Send file cancel!'); finally Mem.Free; end; end; end; end;end.
518026mailto:[email protected]:
http://www.aidelphi.com}
unit UnitServer;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle,
IdAntiFreezeBase, IdAntiFreeze, Gauges;type
TFormServer = class(TForm)
IdUDPServer1: TIdUDPServer;
SaveDialog1: TSaveDialog;
Gauge1: TGauge;
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;ABinding: TIdSocketHandle);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FileName:String;
FileSize:Integer;
Mem:TFileStream;
{ Private declarations }
public
{ Public declarations }
end;var
FormServer: TFormServer;implementation{$R *.dfm}procedure TFormServer.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
Var Str:String;
begin
AData.Seek(0,0);
SetLength(Str,AData.Size);
AData.Read(Str[1],AData.Size);
if Pos('Send file:File Name:',Str)>0 then
begin
Delete(Str,1,Length('Send file:File Name:'));
FileName:=Str;
Str:='Recived File Name OK!';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str));
end else if Pos('Send File:File Length:',Str)>0 then
begin
Delete(Str,1,Length('Send File:File Length:'));
FileSize:=StrToIntDef(Str,0);
SaveDialog1.FileName:=FileName;
if SaveDialog1.Execute then
begin
FileName:=SaveDialog1.FileName;
if FileExists(FileName) then
DeleteFile(FileName);
if Mem<>nil then
begin
Mem.Free;
Mem:=nil;
end;
if not FileExists(FileName) then
Mem:=TFileStream.Create(FileName,fmOpenReadWrite or fmCreate)
else
Mem:=TFileStream.Create(FileName,fmOpenReadWrite);
Str:='Recived File Length OK!';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str));
end else
begin
Str:='Recived File Length Cancel!';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str));
end;
end else if Pos('Send File:File End!',Str)>0 then
begin
if Mem<>nil then
begin
Mem.Free;
Mem:=nil;
Str:='Recived File OK!';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str));
end;
FileName:='';
FileSize:=0;
end
else
begin
if Mem<>nil then
begin
Mem.Seek(0,2);
AData.Seek(0,0);
Mem.CopyFrom(AData,AData.Size);
Gauge1.Progress:=Round(Mem.Size/FileSize*100);
Str:='Recived File Package OK!';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str));
Application.ProcessMessages;
end;
end;
end;procedure TFormServer.FormCreate(Sender: TObject);
begin
IdUDPServer1.Active:=True;
FileName:='';
FileSize:=0;
Mem:=nil;
end;procedure TFormServer.FormDestroy(Sender: TObject);
begin
if Mem<>nil then
Mem.Free;
end;end.
518026mailto:[email protected]:
http://www.aidelphi.com}
unit UnitClient;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
IdAntiFreezeBase, IdAntiFreeze, Gauges;type
TFormClient = class(TForm)
IdUDPClient1: TIdUDPClient;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
OpenDialog1: TOpenDialog;
Gauge1: TGauge;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
FormClient: TFormClient;implementation{$R *.dfm}procedure TFormClient.Button1Click(Sender: TObject);
Var ReceivedString:String;
Mem:TFileStream;
p:Array[0..1023] of byte;
Posi,Len:Integer;
begin
if OpenDialog1.Execute then
begin
IdUDPClient1.Host:=Edit1.Text;
IdUDPClient1.Active:=True;
IdUDPClient1.Send('Send file:File Name:'+OpenDialog1.FileName);
ReceivedString := IdUDPClient1.ReceiveString();
if UpperCase(ReceivedString)='RECIVED FILE NAME OK!' then
begin
Mem:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
try
Posi:=0;
IdUDPClient1.Send('Send File:File Length:'+IntToStr(Mem.Size));
ReceivedString := IdUDPClient1.ReceiveString();
if UpperCase(ReceivedString)='RECIVED FILE LENGTH OK!' then
begin
While Posi<Mem.Size do//一次只发1024个字节,字节数不能太多,不过应该还可以增加一些.
begin
Len:=1024;
if Mem.Size-Posi<1024 then
Len:=Mem.Size-Posi;
Mem.Read(p,Len);
IdUDPClient1.SendBuffer(P,Len);
Inc(Posi,Len);
Gauge1.Progress:=Round(Posi/Mem.Size*100);
ReceivedString := IdUDPClient1.ReceiveString();
if UpperCase(ReceivedString)<>'RECIVED FILE PACKAGE OK!' then
Break;
Application.ProcessMessages;
end;
IdUDPClient1.Send('Send File:File End!');
end else
ShowMessage('Send file cancel!');
finally
Mem.Free;
end;
end;
end;
end;end.