Hallo,
ich benutze das erste Mal die Indy-Komponenten und wahrscheinlich übersehe ich irgendwas.
Ich bin via Ethernet mit einem Embedded Device verbunden, dass einen TCP-Server impementiert. Der Delphi-Client soll nun Timer-gesteuert alle 1000ms Daten von dem Device abfragen.
Die ersten vier Bytes der Nutzdaten sind immer ein UINT32. Dieser gibt an, wie viele Bytes noch kommen. Danach folgen abwechselnd 4 Bytes UINT32 (index) und 4 Bytes SINGLE (wert).
Bisher versuche ich die Daten so zu lesen (zu Testzwecken nicht per Timer, sondern per ButtonPress, Connection besteht bereits):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TMain.Button5Click(Sender: TObject); var A: System.TArray<System.Byte>; B: Array [0..3] of Byte; S: Single absolute B; Count: Integer; i: Integer; begin if TCP.Connected then begin with TCP do begin try IOHandler.WriteLn( 'G' ); Count := IOHandler.ReadLongInt(); Memo1.Text := IntToStr( Count ) + #13#10#13#10;
while i < Count do begin Memo1.Text := Memo1.Text + IntToStr( IOHandler.ReadLongInt() ) + '___'; IOHandler.ReadBytes(A, 4, False); B[0] := A[0]; B[1] := A[1]; B[2] := A[2]; B[3] := A[3]; Memo1.Text := Memo1.Text + FloatToStr( S ) + #13#10; i := i+8; end; finally end; end; end; end; |
Das Problem, das nun auftritt: In der Regel empfange ich das erste Paket vollständig. Da es ein Testpaket ist, kenne ich die Daten und kann diese vergleichen. Wenn ich den Button ein weiteres Mal auslöse, kann es sein, dass ein ReadTimeout aufgeworfen wird und nur die Variable Count im Memo ausgegeben wird. Bei dem nächsten ButtonPress kommt i.d.R. dann nur der erste Index und sein Wert. Und manchmal kommt bei Knopfdruck der ganze Rest und ein komplettes neues Paket.
Sieht jemand von Euch, woran es hapern könnte?
Falls Ihr weitere Info braucht nur zu
Hoffe, jemand hat die springende Idee.
Danke und beste Grüße,
Thomas
Moderiert von
Narses: Beiträge zusammengefasstHat sich erledigt... ist aber auch den Lesern wohl nicht aufgefallen...
Welchen Wert hat i noch gleich? ... Super, dass ich für so nen Kram mehrere Stunden brauche und jede Zeile wie irre lese und Wireshark-Captures anfertige und dann so was
