Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Indy Client, Probleme beim Datenempfang (https://www.delphipraxis.net/190264-indy-client-probleme-beim-datenempfang.html)

Grizu 18. Sep 2016 16:57

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;

Grizu 28. Sep 2016 11:29

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 23:36 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