Jo, das sieht schonmal logisch korrekter aus
Aber ein kleiner Fehler ist immernoch drinnen
Zitat:
Delphi-Quellcode:
if Copy(datas, 1, 1) = '*' then
begin
Delete(datas,1,pos('*',datas));
buffer := strtoint(copy(datas,0,pos('*',datas)-1));
Delete(datas,1,pos('*',datas));
end;
Du gehst davon aus, dass, wenn ein '*' am Anfang von "datas" (dein Buffer) steht, dann ist der Rest (die Längenangabe mit Trenner '*') auch drinnen, also z.B. so~
'*20*' (für Länge = 20)
WAS ist aber, wenn z.B. ReceiveText nur 2 Zeichen zurückliefert; also macht ein
Datas := Datas + ReceiveText
folgendes z.B.:
Code:
Datas = ''
ReceiveText = '*2'
Datas = '*2'
Die If Beindung passt hier, da das erste Zeichen ein '*' ist - ach übrigens, Strings können per Klammer ab 1 indiziert werden, verwende dafür einzelne Zeichen kein Copy bitte
also so in etwa:
Delphi-Quellcode:
if Datas[1] = '*' then
//...
[Edit]
Die If Bedingung so umändern:
Delphi-Quellcode:
// Verbesserungsvorschlag
if (Datas[1] = '*') and (Pos('*', Copy(Datas, 2, Length(Datas))) <> 0) then
An erster Stelle muss ein '*' stehen und irgendwo danach (= ohne erstes Zeichen -- das ist das, was Copy zurückliefert) muss ein '*' vorkommen
[/Edit]
Abschließend möcht ich nochmals erwähen - das Senden muss nach dem selben Prinzip erfolgen.. Lege dort auch ein Datas an, schreibe ne neue Procedure zum Schicken von Daten, welches am Ende von Datas deinen String mit Längenangabe dazu "tut"..
Datas muss dann, wie zuvor beschrieben, (wenn nötig, häppchenweise) periodisch übertragen werden, sofern nicht leer!