Moin und

im Forum!
Vorab:
Bitte verwende die Delphi-Tags für den Code im Editor, dann wird der Code durch Syntaxhighliting viel besser lesbar. Du kannst das in einem Beitrag auch nachträglich noch ändern, einfach auf den Edit-Button oben rechts im Beitrag klicken:
Jetzt zu deinem Problem:
Delphi-Quelltext
1:
| Socket.SendStream(TFileStream.Create('C:\temp\screenshot.bmp', fmOpenRead or fmShareDenyWrite)); |
Damit ist unklar, wie groß der Stream ist, also wieviele Bytes jetzt folgen.
Dieses Ereignis tritt ein, wenn Daten eintreffen:
Delphi-Quelltext
1:
| procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); |
Das heißt aber nicht, dass
alle Daten eingetroffen sind!
Wie
Born-to-Frag schon ganz richtig erkannt hat, erhälst du mit dieser Funktion lediglich die Anzahl der Bytes, die aktuell eingetroffen sind, und da der WSA-Buffer nur 8kb groß ist, sind das eben nur max. 8kb!
Delphi-Quelltext
1:
| SizeOfFile := Socket.ReceiveLength; |
Fazit: Du mußt die Größe des Streams übertragen und dann soviele Bytes lesen, was aber über mehrere OnClientRead-Ereignisse der Fall sein wird.
Das Problem ist am besten mit einem Protokoll zu lösen,
hier ist ein Beispiel, wie man sowas machen könnte.
cu
Narses
There are 10 types of people - those who understand binary and those who don´t.