Zitat von
Socke_SG:
Meine Vermutung ist, dass die Befehle evtl nicht komplett übertragen werden.
Richtig, die Daten können in unvorhersagbarer Weise zerstückelt werden.
Die Datenhäppchen kommen aber gottseidank ich richtiger Reihenfolge; dafür sorgt das Betriebssystem.
Daher muss der Empfang der Daten immer so aussehen:
Delphi-Quellcode:
// dieser Sourcecode ist so vielleicht nicht direkt compilierbar
// er soll nur das Prinzip zeigen
procedure TForm1.DataReceivedHandler(Sender:TObject);
var
command : string;
p : integer;
begin
// empfangene Daten anhängen
FReceiverBuffer := FReceiverBuffer + socket.ReceiveText;
// Annahme: alle Befehle enden mit CR/LF
p := Pos(#13#10, FReceivebuffer);
if p <> 0 then
begin
// Befehl rauskopieren
command := Copy(FReceiveBuffer, 1, p-1);
// und aus dem Empfangspuffer entfernen
FReceiveBuffer := Copy(FReceiveBuffer, p+1, 99999);
ParseAndExcuteCommand(command);
end;
end;