Zitat von
tomate007:
ich brauch es aber, damit der Client die kommandos in der [--] versteht, das er die sachen einzelnt sendet.
Das ist ein Denkfehler. Der Client muss selber feststellen, an welcher Stelle ein neuer Befehl beginnt.
Der Client muss alle Datenpakete hintereinander setzen und daraus seine Befehle entnehmen.
Bleibt ein "halber" Befehl im Puffer, muss der Client diesen bis zum Empfang des nächsten Datenpakets
zwischenspeichern.
Viele Internetprotokolle (
FTP,
SMTP,
POP3, ...) verwenden einen Zeilenumbruch (LF) als Trenner zwischen den einzelnen Befehlen.
Das würde ich dir auch empfehlen.
Hier etwas Pseudocode:
Delphi-Quellcode:
var
daten:string;
procedure TForm1.OnReceive();
var
p : integer;
befehl : string;
begin
// Daten anhängen
daten := daten + socket.ReceiveString;
// Nach Befehlen suchen
repeat
p := Pos(daten, #10); // Suche nach Befehlstrenner
if p <> -1 then
begin
befehl := Copy(daten, 1, p); // einzelnen Befehl rausziehen
Delete(daten, 1, p+1); // Befehl aus Puffer löschen
ExecuteBefehl(befehl); // Befehl ausführen
end;
until p=-1;
end;