Hallo zusammen,
habe folgendes Problem:
Ich habe hier ein externes Gerät, dass per
TCP angesprochen wird und auf Befehl permanent Daten (immer ein Integer) schickt (Port 23, also Telnet).
Ich habe dazu eine Anwendung geschrieben und einen TIdTCPclient in einen Thread verpackt.
Der Thread macht die ganze Zeit ein
FTcpClient.IOHandler.ReadInteger
und kümmert sich darum die Daten an andere Threads zu verteilen.
Hab jetzt das Problem, dass plötzlich (nach einer Weile) die ausgelesenen Daten korrupt sind.
Das sieht dann so aus, also währe mal ein byte verloren gegangen und er hängt jetzt hinterher.
Eigentlich sollte sowas auf
TCP aber nicht möglich sein, also woran kann das liegen?
Evtl. ist das Gerät auch dumm und macht Fehler.
Was mir evtl. helfen könnte währe den Buffer nach jedem ReadInteger komplett leerzulesen, damit sich Fehler nicht aufaddieren.
Wie geht das?
habe dazu folgendes probiert:
Delphi-Quellcode:
while not InputBufferIsEmpty do
...
klappt aber nicht. Komischerweise scheint der immer leer zu sein, obwohl massig daten kommen.
Danke schonmal
EDIT:
Habe gerade mal den Wireshark angeschmissen und gesehen, dass teilweise ein Int.-Packet aufgesplittet wird (also erst 3bytes ankommen, dann das 4. hinterher). Allerdings sehe ich sonst keine Unregelmäßigkeiten -> DOCH
Habe mir das nochmal genau geloggt:
Zitat:
00000238 00 04 82
0000023B e4
0000023C 00 04 98
0000023F b2
00000240 00 04 ad
00000243 66
00000244 00 04 f6
00000247 c8
00000248 00 04 7e
0000024B bc
0000024C 00 04 f8
0000024F fe
00000250 00 04 f9
00000253 d2
00000254 00 04 ff ff
00000258 36
00000259 00 04 e8
0000025C d2
0000025D 00 04 82
00000260 72
00000261 00 04 53
00000264 3e
00000265 00 04 5a
00000268 60
00000269 00 04 5d
0000026C 9c
Wie man sieht ist bei Packet 254 ein Byte mehr da!!! So ein dreck! Danach kommt natürlich alles aus dem Rhythmus.
Was soll ich denn jetzt machen?