AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

idTCP in iOS

Ein Thema von XXcD · begonnen am 13. Aug 2016 · letzter Beitrag vom 15. Aug 2016
Antwort Antwort
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

idTCP in iOS

  Alt 13. Aug 2016, 23:30
Hallo,

ich habe momentan ein Problem mit dem Empfangen von Daten in meinem Programm.
Das Programm funktioniert soweit, nur es werden nur bei jedem zweiten Sendevorgang Daten empfangen.
Serverseitig werden die Daten jedoch empfangen.

Das ganze läuft in einem AnonymousThread.

Hier mal mein aktueller Quellcode:

Delphi-Quellcode:
TThread.CreateAnonymousThread(procedure ()
  var
    I: Integer;
    c: Byte;
  begin
  while not Application.Terminated do
  begin
    if not IdTCPClient1.Socket.InputBufferIsEmpty then
    begin
      if IdTCPClient1.Connected then
      begin
       c:=IdTCPClient1.Socket.ReadByte;

       //mache was mit den Daten
      end;
    end
    else
    IdTCPClient1.Socket.CheckForDataOnSource(100);
  end;
  end).Start;
Es scheint so als würde der InputBuffer sich nur bei jedem zweiten Empfangen zu füllen.
Wenn ich zum Testen die Daten so abrufe, dann kommt immer alles an:

Delphi-Quellcode:
procedure TTabbedForm.Button1Click(Sender: TObject);
var
s: string;
begin
s:=IdTCPClient1.Socket.Readln();
Memo1.Lines.Add(s);
end;
Ich hoffe mir kann jemand bei dem Problem helfen.

Mit freundlichen Grüßen

XXcD
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: idTCP in iOS

  Alt 14. Aug 2016, 11:01
Indy blockiert bei ReadXXX bis Daten vorhanden sind. Die Prüfung auf Connected ist nicht notwendig.

Indy wird eine Exception auslösen, wenn das ReadByte wegen eines Timeouts oder einer fehlenden Verbindung scheitert.

Delphi-Quellcode:
TThread.CreateAnonymousThread(procedure ()
  var
    C: Byte;
  begin
  while not Application.Terminated do
  begin
    try
      C := IdTCPClient1.Socket.ReadByte;
      // mache was mit den Daten
    except
      on E: Exception do
      begin
        // behandle Timeout, z.B. durch Neuaufbau der Verbindung
      end;
    end
    else
  end;
  end).Start;
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#3

AW: idTCP in iOS

  Alt 14. Aug 2016, 11:48
Danke für deine Antwort, ich habe das gerade so geändert wie du geschrieben hast.
Leider verändert sich nichts an meinem Problem, kann es sein, dass die Daten zu klein sind, sodass der Buffer sich füllt?
Ich erwarte immerhin nur 13 Bytes pro Paket.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: idTCP in iOS

  Alt 14. Aug 2016, 12:53
Danke für deine Antwort, ich habe das gerade so geändert wie du geschrieben hast.
Leider verändert sich nichts an meinem Problem, kann es sein, dass die Daten zu klein sind, sodass der Buffer sich füllt?
Ich erwarte immerhin nur 13 Bytes pro Paket.
Für Pakete bekannter Länge bietet TIdTCPClient auch eine Methode, mit der ein Byte Array fester Länge eingelesen wird

procedure ReadBytes(var VBuffer: TIdBytes; AByteCount: Integer; AAppend: Boolean = True);

d.h.:

IdTCPClient1.Socket.ReadBytes(MyBytesArray, 13, False);
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#5

AW: idTCP in iOS

  Alt 15. Aug 2016, 12:39
Die Pakete haben leider eine unbekannte Länge.

Ich konnte das Problem aber lösen. Es lag am Client der die CRC Summe die ich empfange falsch berechnet hat.
Vielen Dank für die Bemühungen.

Mich würde nur noch interessieren warum der Anonymous Thread nicht läuft wenn ich das Programm für Windows compiliere.
  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 07:30 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