AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdTCPClient buffer leerlesen
Thema durchsuchen
Ansicht
Themen-Optionen

TIdTCPClient buffer leerlesen

Offene Frage von "mts"
Ein Thema von mts · begonnen am 6. Okt 2009
Antwort Antwort
mts

Registriert seit: 14. Dez 2008
24 Beiträge
 
Delphi XE4 Professional
 
#1

TIdTCPClient buffer leerlesen

  Alt 6. Okt 2009, 22:58
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?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz