Einzelnen Beitrag anzeigen

Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#18

AW: TCP Filelistening

  Alt 1. Mär 2014, 18:22
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!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton ( 1. Mär 2014 um 18:30 Uhr)
  Mit Zitat antworten Zitat