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