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;
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
kolay gelsin