Arşiv Anasayfa VCL (Delphi Visiual Component Library)
Sayfalar: 1
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.