Thema: Delphi Socket.ReceiveText

Einzelnen Beitrag anzeigen

Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#12

Re: Socket.ReceiveText

  Alt 19. Aug 2003, 13:24
GELÖST!

Ok, nach aktuellem Wissensstand war es ja so, dass ich nach einem Aufruf von Socket.ReceiveText nichts mehr in den FileStream schreiben konnte, weil ReceiveText die Daten nach dem Lesen aus dem Speicher entfernt.

Eigentlich hätt ich auch früher drauf kommen können, aber ich machs jetz so:

Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  iLen: Integer;
  Bfr: Pointer;
  str: string;
  sstr: TStringStream;
begin
  iLen := Socket.ReceiveLength;
  GetMem(Bfr, iLen);
  sstr:= TStringStream.Create('');
  try
    Socket.ReceiveBuf(Bfr^, iLen);
    sstr.Write(Bfr^, iLen); //anstatt alles also per ReceiveText zu leeren, schreibe ich mir die Daten erstmal in einen StringStream
    str:= sstr.DataString; //das dann in einen String (muss eigentlich nicht, kann aber...)
    if copy(str, 1, 4) = plakette then begin //dann kann ich überprüfen ob es eine Nachricht für mich ist, die mir das Gegenüber geschickt hat
      //hier kann ich dann die normale Nachrichtenverarbeitung machen
    end
    else FStream.Write(Bfr^, iLen); //FStream ist ein TFileStream, der woanders createt wird. Wenn ich also die ersten Zeichen nicht als Plakette erkenne, schreibe ich die Daten direkt in den FileStream
  finally
    FreeMem(Bfr);
    FStream.Free;
    sstr.Free;
  end;
end;
Getestet - läuft.
Juchuuuuuuu!!!

Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat