Einzelnen Beitrag anzeigen

4lb3rtO

Registriert seit: 11. Okt 2011
11 Beiträge
 
Delphi 2010 Professional
 
#1

ungenaues ReceiveLength

  Alt 7. Nov 2012, 10:26
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
  Mit Zitat antworten Zitat