![]() |
Indy Client, Probleme beim Datenempfang
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
ich bräuchte mal ein wenig oder auch mehr Hilfe mit meinem Indy Client. Das Senden funktioniert prima. ich habe ein Problem beim Datenempfang. Schicke ich ein einzelnes Kommando mit einem Button, dann bekomme ich eine Antwort. Siehe Bild Tracking Daten....(im Anhang). Schickt dann das Gerät Daten, diese kommen schnell hintereinander, dann habe ich die gleiche Message mehrfach in meiner Datenbox stehen. Siehe 2. Bild. Wie kann ich das verhindern? Das empfangen läuft in einem eigenen Thread. Delphi Version ist Berlin 10.1
Delphi-Quellcode:
procedure MSC_Client_Receive.Execute;
var TBuffer: TiDBytes; s : String; b : Byte; a,i, i1, track : integer; begin if TStop then begin while not Terminated do begin try Main_Frm.msc_client.IOHandler.ReadBytes(BBuffer, -1, False); a := 0; a := Length(BBuffer); i1 := 0; s := ''; for i := 1 to a do begin b := BBuffer[i1]; if b <> 3 then begin if b = 2 then begin i1 := i1 + 1; end else begin s := s + Chr(b); i1 := i1 + 1; end; end; if b = 3 then begin sMsg := s; if sMsg <> '' then begin Synchronize(UpdateRecordbox); Synchronize(Update_RDT_Parameter); track := Pos('sSN eCCTrackingData', sMsg); if track > 0 then begin Synchronize(UpdateTrackingData); tracking_data_online.NewCreate(sMsg); end; end; end; end; BBuffer := nil; SetLength(BBuffer,0); Main_Frm.msc_client.IOHandler.InputBuffer.Clear; except on e: exception do begin end; end; end; if not TStop then begin Terminate; end; end; end; |
AW: Indy Client, Probleme beim Datenempfang
So habs gefunden. Eigentlich ganz simple.....habe nur den Buffer an der falschen Stelle zurückgesetzt...
so geht's:
Delphi-Quellcode:
if b = 3 then begin
sMsg := s; if sMsg <> '' then begin Synchronize(UpdateRecordbox); Synchronize(Update_RDT_Parameter); track := Pos('sSN eCCTrackingData', sMsg); if track > 0 then begin Synchronize(UpdateTrackingData); tracking_data_online.NewCreate(sMsg); end; end; a := 0; BBuffer := nil; SetLength(BBuffer,0); Main_Frm.msc_client.IOHandler.InputBuffer.Clear; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz