Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Delphi - Problema Download Immagini Client\Server
Forum - Delphi - Problema Download Immagini Client\Server

Avatar
DragoHacker (Normal User)
Newbie


Messaggi: 8
Iscritto: 08/10/2011

Segnala al moderatore
Postato alle 15:03
Mercoledì, 12/10/2011
Salve ragazzi sto avendo problemi con il download tra server e client.
Praticamente i codici SEMBRANO funzionare bene perchè infatti l'immagine
si scarica. Ma quando vado ad aprirla mi dice che è in corso la modifica da un altro
programma e non me la fa aprire, ne copiare,ne rinominare,ne cancellare(logicamente).
Ora vi chiedo se potete darmi una mano a risolvere questo problema, allora io voglio che non mi dia più il problema che non si apre.

Ecco il codice che ho messo nel server:

Codice sorgente - presumibilmente Delphi

  1. procedure TForm1.ClientSocket6Read(Sender: TObject;
  2.   Socket: TCustomWinSocket);
  3. var
  4. F: File of byte;
  5. NumRead: Integer;
  6. Buffer: array [1..8196] of Char;
  7. MemoryStream:  TMemoryStream;
  8. begin
  9.  edit12.text := socket.ReceiveText;
  10. AssignFile(F, 'tuofile.jpg');
  11. Reset(F);
  12. ClientSocket6.Socket.SendText('SIZE!' + IntToStr(FileSize(F)));
  13. ProgressBar1.Max := FileSize(F);
  14. ProgressBar1.Position := 0;
  15. Sleep(200);
  16. repeat
  17.   BlockRead(F,Buffer, SizeOf(Buffer), NumRead);
  18.   Clientsocket6.Socket.SendBuf(Buffer, SizeOf(Buffer));
  19.   ProgressBar1.Position := ProgressBar1.Position + SizeOf(Buffer);
  20.   Sleep(30);
  21. until (NumRead = 0);
  22. CloseFile(F);
  23.      end;




Ecco il codice che ho messo nel client:

Codice sorgente - presumibilmente Delphi

  1. procedure TForm1.ServerSocket6ClientRead(Sender: TObject;
  2.   Socket: TCustomWinSocket);
  3.   var
  4.      FromF,
  5.   ToF        : file of byte;
  6.   Buffer     : array[0..4096] of char;
  7.   NumRead    : integer;
  8.   FileLength : longint;
  9.    tmpstream: TMemoryStream;
  10.     jpg: tjpegimage;
  11.   oStm:TMemoryStream;
  12.   iLen: Integer;
  13.   Bfr: Pointer;
  14.   Text : string;
  15.   F: File of byte;
  16. myJPG : Tjpegimage;
  17. memorystream: TMemoryStream;
  18.   mBmpSource, mBmpDestination : Tbitmap;
  19. begin
  20.    if not ReceivingFile then
  21.   begin
  22.    Text := Socket.ReceiveText;
  23.     if Copy(Text, 1, 5) = 'SIZE!' then
  24.     begin
  25.       Delete(Text, 1, 5);
  26.       Len := StrToInt(Text);
  27.       form2.Progressbar1.Max := StrToInt(Text);
  28.       FStream := TFileStream.Create('tuofile.jpg', fmCreate or fmShareDenyWrite);
  29.       ReceivingFile := true;
  30.     end;
  31.   end
  32.   else
  33.   begin
  34.     iLen := Socket.ReceiveLength;
  35.     GetMem(Bfr, iLen);
  36.     try
  37.       Socket.ReceiveBuf(Bfr^, iLen);
  38.       FStream.Write(Bfr^, iLen);
  39.       form2.Progressbar1.Position := form2.Progressbar1.Position + iLen;
  40.       if form2.Progressbar1.Position = 100 then begin
  41.       form2.Progressbar1.Position := 0;
  42.       end;
  43.         CloseFile(FromF);
  44.     finally
  45.        FreeMem(Bfr);
  46.        if Assigned(FStream) and (FStream.Size = Len) then
  47.        begin
  48.          FStream.Free;
  49.          FStream := nil;
  50.          ReceivingFile := false;
  51. end;
  52.     end;
  53.   end;
  54. end;
  55. end.



spero possiate aiutarmi.

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6388
Iscritto: 03/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 16:05
Mercoledì, 12/10/2011
Sei sicuro che la parte di codice

FStream.Free;

venga eseguita?

Fai un po' di debugging per capire se quella istruzione, per qualche motivo, non viene eseguita.

P.S. Mi sembra che il codice sia molto molto simile a quello di questa discussione

http://www.pierotofy.it/pages/extras/forum/171/1023619-tra ...

e mi sembra che quello funzioni ... se devi fare copia incolla, fallo bene ...

bhe in effetti non ne sono sicuro perchè non avrebbe molto senso il fatto che mi dia questo problema, comunque non ho fatto copia e incolla - DragoHacker - 12/10/11 16:34
Fai debugging e controlla se quella istruzione viene eseguita o no. - nessuno - 12/10/11 16:39


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 17:18
Mercoledì, 12/10/2011
Ma Sei sicuro che il codice che hai postati funziona??? hai fatto almeno un debug Step-by-step ? (F8)
Secondo me ci sono molte cose sembrano buttate giù per fare dei test e poi non cancellate il che provoca molto "pasticcio" nel codice, ad esempio dichiari 16 variabili locali, ma ne usi solo 3 ...le altre 13?? sempre nello stesso codice usi delle variabili globali? locali della classe TForm?? dove sono ? chi sono? in che stato sono?
Così ad occhio (come dice nessuno) la if alla riga 46 sarà sempre false (forse in alcuni casi .. la ritrovi a true e allora funziona), dunque il tuo stream rimane incastrato sino alla distruzione dell'applicativo ...
Secondo il mio modesto parere ... c'e' molto da rivedere anche se metti a posto la riga 46 ... Ti conviene fare un bel refactoring di tutto il codice se l'andazzo è quello che hai postato ... hai troppe veriabili volanti che non sembrano girare secondo un flusso logico ... poi ... io non sono un professionista, ma solo un semplice hobbista ..la palla passa a chi ci capisce di più ...
G.

tranquillo ho rimediato - DragoHacker - 12/10/11 18:45
Sarebbe anche "educato" indicare come, dopo che hai avuto tanta attenzione ... - nessuno - 12/10/11 19:47


Ibis redibis non morieris in bello
PM
Avatar
Codice_xXx (Normal User)
Newbie


Messaggi: 1
Iscritto: 11/10/2011

Up
-1
Down
V
Segnala al moderatore
Postato alle 17:20
Martedì, 18/10/2011
DragonHacker non e` altro che l`utente "Track"

ma se manco lo conosco - DragoHacker - 20/10/11 18:31
PM
Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Up
-2
Down
V
Segnala al moderatore
Postato alle 14:20
Giovedì, 20/10/2011
xD

PM