Hallo
hätte da noch mal eine kurze Frage zur ScktComp Bibliothek. Ich versuche nun damit ein Bild in einem MemoryStream zu übertragen und vorerst in einer Datei zu speichern.
Server(Empfänger)
Delphi-Quellcode:
procedure TForm1.ServerRead(Sender: TObject; Socket: TCustomWinSocket);
var
Bfr: Pointer;
ms: TMemoryStream;
jpg: TJpegImage;
siz: Integer;
begin
try
ms := TMemoryStream.Create;
jpg := TJpegImage.Create;
// Gibt die Anzahl der Bytes zurück, die über die Socket-Verbindung gesendet werden.
// Anmerkung: Bei Stream-Socket-Verbindungen kann der von ReceiveLength zurückgegebene Wert ungenau sein.
siz := Socket.ReceiveLength;
// GetMem weist einen Speicherblock zu.
GetMem(Bfr, siz);
// Liest bis zu Count Bytes aus der Socket-Verbindung in den Parameter Buf.
Socket.ReceiveBuf(Bfr^, siz);
// Write schreibt immer die in Count festgelegte Anzahl von Bytes in den Puffer,
// wenn kein Speicherfehler auftritt. Demnach ist Write für ein
// TMemoryStream-Objekt das Äquivalent zur Methode WriteBuffer.
ms.Write(Bfr^, siz);
Memo1.Lines.Add(IntToStr(siz));
sum := sum + siz;
ms.SaveToFile('.\test.jpg');
ms.Free;
jpg.Free;
FreeMem(Bfr);
finally
Memo1.Lines.Add('Received: ' + IntToStr(sum));
end;
end;
Leider habe ich nun den Fall, das sich die Anzahl der gesendeten und empfangenen Bytes unterscheidet und gehe im Moment davon aus, das es an der ReceiveLength-Methode liegt. Kennt jemand das Problem bzw. einen Weg, wie man das umgehen kann? Besten Dank im Voraus
Schöne Grüße
4lb3rtO