In den folgenden zwei Zeilen steckt ein fataler Fehler:
Delphi-Quellcode:
ReceivedText := Socket.ReceiveText;
cmd := Copy(ReceivedText, 0, 3);
data := Copy(ReceivedText, 4, Length(ReceivedText));
Seit wann sind Delphi-Strings 0-basiert?
Die Pufferung geht im Prinzip so:
Delphi-Quellcode:
ReceivedText := Socket.ReceiveText;
fBuffer := fBuffer + ReceivedText;
if CompleteCommandInBuffer (fBuffer) Then begin
myCommand := ExtractCommandStructureFromBuffer (fBuffer);
fBuffer := RemoveCommandDataFromBuffer (fBuffer);
myCommandResult := ProcessCommand (myCommand);
myCommandResult.SendAnswer(Socket); // Nur nötig, wenn das Kommando bestätigt werden muss
end
Problem hierbei: Während das Kommando ausgeführt wird, sind keine weiteren Operationen möglich. Das wäre ok, sofern ein
query-response implementiert wird.