![]() |
Probleme mit Dateiempfang von TSockets
Hallo,
ich habe im Internet was gefunden umd mit den TSocket Komponenten Dateien zu schicken. Alles funktioniert auch wunderbar, nur wenn der Server die Datei empfangen hat, kommt es mir so vor, als ob sie nicht abgeschlossen wird. Dabei handelt es sich um ein JPG Bild. Erst wenn dich die Anwendung schließe, kann ich das Bild angucken. Hier der Code beim Empfangen:
Delphi-Quellcode:
TMP = 'C:\Windows\Temp\tmp.jpg'
procedure TMainForm.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var FST: TFileStream; LEN: integer; BUF: Pointer; begin FST := TFileStream.Create(TMP, fmCreate or fmShareDenyWrite); LEN := Socket.ReceiveLength; GetMem(Buf, Len); try Socket.ReceiveBuf(Buf^, Len); FST.Write(Buf^, Len); finally FST := nil; FST.Free; end; end; Gibt es bei TFileStream noch eine Prozedure, die ich vergessen habe? Danke im Voraus |
Re: Probleme mit Dateiempfang von TSockets
Zitat:
Zitat:
Im finally-Block lässt Du FST dann erstmal auf die Adresse nil zeigen (wo bekanntlich nichts steht). Dein eigentliches Objekt (dass Du mit einer Sperre fmCreate or fmShareDenyWrite angelegt hast) befindet sich noch im Speicher. Mit dem FST.Free gibst Du ein Objekt an der Adresse nil frei, Free macht genau dann nichts (weil man eben nichts nicht freigeben kann). Wichtig ist hier wirklich zu verstehen, dass FST nur der (implizite) Zeiger auf ein Objekt ist. Weißt Du FST einen anderen Wert zu, so änderst Du nur die Adresse auf die die Variable zeigt, nicht das Objekt hinter eben dieser Adresse. Gruß Der Unwissende |
Re: Probleme mit Dateiempfang von TSockets
Es funzt jetzt. Danke für deine Verständliche antwort, jetzt habe ich es verstanden.
|
Re: Probleme mit Dateiempfang von TSockets
Diese Lösung funktioniert nur, wenn die Bilder entsprechend klein sind und die Verbindung entsprechend schnell. Der OnClientRead Event kann mehrfach aufgerufen werden, bis die Datei erfolgreich komplett empfangen wurde.
|
Re: Probleme mit Dateiempfang von TSockets
Du hast mir gerade die Lösung für ein anderes Problem verraten xD
Die Bilder haben eine Größe von 161x353 Pixeln und liegen im JPG Format vor. Dürfte also kein Problem sein. Zur sicherheit baue ich jetzt ein Sleep(1000) ein. Müsste reichen bei LAN... |
Re: Probleme mit Dateiempfang von TSockets
Ich würde es einfach richtig programmieren...
Vorschlag: Sende direkt einen Integer mit der Grösser der Daten die du sendest. Dann auf der Empfängerseite einfach so lange den FileStream offen halten und dort Daten reinschreiben, bis der Stream die ganz zu Anfang übertragene Grösse erreicht hat. Dann kannst auch den Stream schliessen, etc |
Re: Probleme mit Dateiempfang von TSockets
so ich habe jetzt gaaaanz viel rumprobiert und komme nicht weiter.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz