Clientın <C:\> dizinine dosya aktarım

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Clientın <C:\> dizinine dosya aktarım

Mesaj gönderen onclick_lik »

S.a arkadaslar
Daha önce Udp broadcast işlemiyle dosya gönderimi hakkında sorum olmuştu.Serverden broadcast yoluyla cliente dosya gönderim yapma işlemini çözdüm diyebilirim.ama şöyle bir problemim var.Serverden dosya gönderdiğim zaman client tarafında savedialogla kaydettiriyom.Geri bildirim yoluyla birebir de bi sorun yok ama client sayısı 2 ve daha fazla olunca geri bildirim sebebiyle aynı anda porta fazla bilgi geldiği için gönderme işlemi iptal oluyo!!

Geri bildirim işlemini kapattığım zaman bu seferde server hemen dosyayı göndermeye başlıyo..ve clientler dosyayı 3-5 saniyelik gecikmeyle dosyayı eksik alıyorlar...Asıl soruma gelince..Ben bu işlemi savedialogsuz yapmak istiyorum :!:

Örneğin server porta dosyayı attığı zaman clientler dosyaya dokunmadan direkt olarak >>C:\Gelen Dosyalar\<< gibi atmasını istiyorum..Bunu için bilgilerinize ihtiyacım var...Yardım olması için client tarafının kod bloğunu gönderiyorum...

Kod: Tümünü seç

str:string;
dosya:Tfilestream;
yol:string;
boyut:integer;
sd=Savedialog bu arada

Kod: Tümünü seç

  
  begin  
     aData.Seek(0,0);
      setLength(str,aData.size);
      aData.Read(str[1],aData.Size);
 try
    if pos('Dosya gönderim:',str)>0 then begin
      delete(str,1,length('Dosya gönderim:'));
      yol:=str;
      Application.MessageBox('SERVERDEN DOSYA GELDİ',' Uyarı', mb_ok+mb_iconinformation);
    end else
          if pos('Ds_uzunluk:',str)>0 then begin
                 delete(str,1,length('Ds_uzunluk:'));
                 boyut:=strToIntDef(str,0);
                 sd.FileName:=yol;
  
          if sd.execute then begin
                 yol:=sd.FileName;
          if FileExists(yol) then
                 deleteFile(yol);
          if dosya<>nil then begin
                 dosya.Free;
                 dosya:=nil;
              end;
          if not fileExists(yol) then
                 dosya:=TFileStream.Create(yol,sysutils.fmOpenReadWrite or fmCreate)
              else
                dosya:=TFileStream.Create(yol,fmopenReadWrite)
            end;
           // else
             begin
                  MessageDlg('Dosya alımı iptal edildi',mtWarning,[mbok],0);
            end; end
            else
          if pos('Gönderim bitti:',str)>0 then begin
          if dosya<>nil then  begin
                dosya.Free;
                dosya:=nil;
                yol:='';
                boyut:=0;
                Gauge1.Progress:=0;
                Application.MessageBox('DOSYA BAŞARIYLA KAYDEDİLDİ...','Bilgi',mb_ok+mb_iconinformation);
          end; end else begin
         if dosya<>nil then begin
                dosya.Seek(0,2);
                aData.Seek(0,0);
                dosya.CopyFrom(aData,aData.Size);
                gauge1.Progress:=round(dosya.size/boyut*100);
                application.ProcessMessages;
            end;
         end;
    finally
    end;
end
[/code]

kolay gelsin
Kullanıcı avatarı
Nick_
Üye
Mesajlar: 122
Kayıt: 01 Eki 2007 09:28
Konum: Konya

Mesaj gönderen Nick_ »

Broadcast agı cok kasar sonucta sen 1 pc ye degıl belkı 100 pc ye dosya gonderımı yapacaksın bence broadcast deılde Tcp/Ip server ıle calıs..
tabı dıger ustadlar daha ıyı bılır..Kolay gelsın
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

evet dediğiniz gibi broadcast ağı yoruyor ama o şekilde yapmam lazım..Benim burada ihtiyacım server dosyayı gönderdiği zaman clientler direk C:\Gelen Dosyalar gibi dizine atmasını istiyorum.Save dialog işi bozuyor... :cry:
tabı dıger ustadlar daha ıyı bılır..
Üstadlarımın yardımlarını bekliyorum.. :oops: Kolay gelsin..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Ağda paylaşılmış bir klasör oluşturabilirsen veya bir FTP sunucu kurabilirsen, hatta hazıra konmak için WEB üzerindeki bir FTP sunucuya gerekli dosyayı UPLOAD edip sonra artık broadcast ile mi - TCP ile mi, hangisi senin için uygunsa mesajını bu dosya yolunu yollasın. İndirme işini client'lar bu FTP'den diledikleri zaman -ister aynı anda ister farklı zamanlarda- otomatik olarak indirebilirler. Aklıma hemen bu geldi.
Resim
Resim ....Resim
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Hocam öneriniz cok güzel ama öyle bir imkanım yok..Ben herşeyi programla yapmak istiyorum.Server dosyayı atsın broadcast yöntemi ile o portu dinleyen clientlerde alsın.
Cevapla