Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi dateien per sendstream empfangen (https://www.delphipraxis.net/94154-dateien-per-sendstream-empfangen.html)

Karg 17. Jun 2007 09:46


dateien per sendstream empfangen
 
hi alle zusammen,
ich habe folgendes problem:
ich habe ein bild und dieses bild sende ich per sendstream an den server.
beim server werden auch daten übermittelt, nur wenn ich das bild am ende wieder freigeben möchte, dann gibt es immer eine fehlermeldung und das bild ist nur halb fertig.

Deswegen meine frage: wie kann ich dem bild sagen, wann es fertig ist????

hier mal code:
Delphi-Quellcode:
client:
senden:=Tfilestream.create('c:\windows\screen_neu.jpg',fmopenread);
form1.ClientSocket1.Socket.SendStream(senden);
Delphi-Quellcode:
server:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
              var screenshot:tjpegimage;
                  buffer:pointer;
                  i:integer;

begin
i:=socket.ReceiveLength;
getmem(buffer,i);
  try
     socket.ReceiveBuf(buffer^,i);
     input_bild.Write(buffer^,i);
  finally
         freemem(buffer);
        end;
if input_bild.size=i
   then input_bild.free;
end;

Apollonius 17. Jun 2007 11:14

Re: dateien per sendstream empfangen
 
Zitat:

Delphi-Quellcode:
if input_bild.size=i
   then input_bild.free;

Du gibst den Stream hiermit praktisch in jedem Durchlauf frei. Du solltest zu Beginn der Übertragung eine Längenangabe senden, also einfach Clientstream.size, diese dann in einer globalen Variablen speichern und prüfen, ob die Größe des Empfangsstreams gleich dieser Größe ist. Die Daten werden ja nicht in einem Rutsch übertragen, sodass du mehrfach Daten an den Stream anhängen musst.

Karg 17. Jun 2007 13:31

Re: dateien per sendstream empfangen
 
also erst mal danke für die antwort...
allerdings hab ich es immer noch nicht ganz hinbekommen.
Ich hab jetzt beim client die stream.size in einen string umgewandelt und sende diesen an den server.
Der server bekommt den text und und wandelt ihn in eine integer um. Diese integervariable bau ich jetzt folgendermaßen ein:
Delphi-Quellcode:
if input_bild.size =filesize
   then input_bild.Free;
Wenn ich das dann auprobiere bekomme ich immer eine fehlermeldung. Warum??? Was soll ich jetzt machen ???


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz