Einzelnen Beitrag anzeigen

Grizu

Registriert seit: 22. Aug 2016
20 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Indy Client, Probleme beim Datenempfang

  Alt 18. Sep 2016, 17:57
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;
Miniaturansicht angehängter Grafiken
tracking-data.jpg   mehrfach_daten.jpg  
  Mit Zitat antworten Zitat