Indy İle Dosya Gönderme Gönderen: xbarakuda Tarih: 07 October 2005 18:57:10
DOSYA GÖNDERMEİndy tcp bileşenlerini kullanarak chat programı yapmıştık birde bu uygulamaya dosya gönderme foksiyonu ekliyelim
CLİENT
BEN tasarımı bu şekilde yaptım dosyanın gönerim durumunu izlemek için bir tane pogressbar atın kod aynen şöyle
procedure TForm1.FormCreate(Sender: TObject);
begin
bitbtn3.Enabled:=false;
bitbtn2.Enabled:=false;
animate1.hide;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
port:integer;
begin
port:=strtoint(edit2.Text);
client1.Port:=port; //unutulmaması gereken serverdeki portla aynı olması gerekir
client1.Host:=(edit1.Text);
client1.Connect;
if client1.Connected=true then
begin
bitbtn1.Enabled:=false;
bitbtn2.Enabled:=true;
bitbtn3.Enabled:=true;
bar1.Panels[0].Text:='baglantı sağlandı';
end;
end;
procedure TForm1.Client1Disconnected(Sender: TObject);
begin
bar1.Panels[0].Text:='bağlantı koptu ';
bitbtn3.Enabled:=false;
bitbtn1.Enabled:=true;
bitbtn2.Enabled:=false;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
client1.Disconnect;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
var
boyut:single;
dosya:tfilestream;
dyol:ansistring;
begin
if opendialog1.Execute then
begin
dyol:=opendialog1.FileName;
label5.Caption:=dyol;
end;
dosya:=tfilestream.Create(dyol,fmopenread);
boyut:=dosya.Size;
label6.Caption:=floattostr(boyut);
client1.WriteStream(dosya);
end;
// işlem durumunu görmek için
procedure TForm1.Client1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
bar1.Panels[0].Text:='dosya gönderiliyor ';
progressbar1.Visible:=true;
progressbar1.Position:=0;
progressbar1.Max:=AWorkCountMax;
animate1.Active:=true;
animate1.Show;
if AWorkCountMax >0 then
label7.Caption:=inttostr(AWorkCountMax);
application.ProcessMessages;
end;
procedure TForm1.Client1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
bar1.Panels[0].Text:='dosya gönderildi ';
animate1.Active:=false;
animate1.Hide;
progressbar1.Visible:=false;
application.ProcessMessages;
end;
procedure TForm1.Client1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
if progressbar1.Max > 0 then
begin
label7.Caption:='durum:'+inttostr(AWorkCount)+'/'+inttostr(progressbar1.Max)+'byte';
progressbar1.Position:=(AWorkCount);
end
else
label7.Caption:=inttostr(AWorkCount)+'byte';
application.ProcessMessages;
end;
end.
SERVER KISMI procedure TForm1.FormCreate(Sender: TObject);
begin
server1.DefaultPort:=1111; //dinlemeye aldımız port
server1.Active:=true;
end;
procedure TForm1.Server1Connect(AThread: TIdPeerThread);
begin
statusbar1.Panels[0].Text:=(athread.Connection.Socket.Binding.PeerIP+'numaralı kişi baglandı ');
statusbar1.Panels[1].Text:='bilgisayrın adı '+ athread.Connection.Socket.Name;
end;
procedure TForm1.Server1Execute(AThread: TIdPeerThread);
var
kod:string;
dosya:tfilestream;
dyol:ansistring;
boyut:single;
begin
kod:=athread.Connection.ReadLn;
if (kod='dosya') then
begin
if (save.Execute) then
begin
dyol:=save.FileName;
end;
dosya:=tfilestream.Create(dyol,fmcreate);
boyut:=dosya.Size;
statusbar1.Panels[0].Text:=':'+floattostr(boyut)+'boyutunda dosya alınıyor';
athread.Connection.ReadStream(dosya);
statusbar1.Panels[0].Text:='dosya gönderimi tamam';
end;
end;
end.