AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TidTCPCLient erzeugt Stack-Overflow
Thema durchsuchen
Ansicht
Themen-Optionen

TidTCPCLient erzeugt Stack-Overflow

Ein Thema von rokli · begonnen am 28. Okt 2014 · letzter Beitrag vom 30. Okt 2014
Antwort Antwort
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#1

AW: TidTCPCLient erzeugt Stack-Overflow

  Alt 28. Okt 2014, 16:42
Müsste das nicht ehr ein TCP-Server sein? So wie ich das sehe schickst Du ja vom Client keinen Befehl an den Scanner, um dann das Ergebnis abzufragen, sondern der Scanner schickt was, wenn er was hat.
Dann könntest Du mit dem OnExecute des TCP-Servers darauf reagieren und schauen was geliefert wird. Ich glaube das ist auch das Event was Sherlock meint.
Der TCP-Server macht ja einen Thread auf und steht dann blockierend auf dem Socket und wartet, bis was ankommt. Wenn was kommt, wird es verarbeitet. Das ganze passiert dann in einer Schleife.

Ich habe leider gerade kein Delphi hier, um genau zu schauen, wie die Events heißen, aber das kam mir gerade in den Sinn, als ich Deinen Beitrag gelesen habe.

Oder verstehe ich das falsch. Das setzt natürlich voraus, dass der Scanner sich zu Deinem Programm verbindet, und was schickt. Dein Programm läuft als Server in einem Loop und reagiert nur.
Christian Rüsken
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TidTCPCLient erzeugt Stack-Overflow

  Alt 29. Okt 2014, 06:24
Guten Morgen!

Leider musste ich gestern weg und konnte nicht mehr antworten.

Also es verhält sich so, dass der Barcode Scanner ein TCPServer ist. Und dieser Server sendet das, was er als Barcode gelesen hat. Damit (so habe ich es interpretiert) habe ich auf "meiner" Seite einen TCPClient genommen ... was ja auch in den ersten 15 bis 20 Minuten funktioniert.

Im Moment läuft der Aufbau übrigens wieder ohne den Application.ProcessMessages.
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TidTCPCLient erzeugt Stack-Overflow

  Alt 29. Okt 2014, 06:55
So sieht der Fehler aus, den ich da bekomme.
Angehängte Grafiken
Dateityp: png Fehlermeldung.png (8,4 KB, 15x aufgerufen)
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.765 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TidTCPCLient erzeugt Stack-Overflow

  Alt 29. Okt 2014, 07:20
Kannst Du eigentlich isolieren, in welcher Zeile der Fehler auftritt? Hast Du sowas wie MadExcept oder EurekaLog?

Ausserdem sellt ein Server in einer normalen Welt Daten bereit, die ein Client abholen kann, so er denn lustig ist. Also müsste es eigentlich so sein, daß in mehr oder weniger Regelmäßigen Abständen Dein client eine Verbindung aufbaut, und mal nachsieht, obs was neues zu holen gibt. Dein Konstrukt sieht mir nicht so ganz danach aus. Aber dazu kenne ich die Indys zu schlecht.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann

Geändert von Sherlock (29. Okt 2014 um 07:22 Uhr)
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TidTCPCLient erzeugt Stack-Overflow

  Alt 29. Okt 2014, 07:51
Hallo Sherlock,

genauso soll es sein! Innerhalb des Timers wird in der Zeile strLine = tcpClient.IOHandler.ReadLn ermittelt, ob der Server etwas bereit gestellt hat. Wenn das der Fall ist, soll der Wert in strLine im if-Konstrukt weiter verarbeitet. Wenn der Server keine Daten bereit gestellt hat, läuft der Timer einfach weiter.

Im Moment Trenne ich die Verbindung vor dem If und Verbinde nach dem If wieder - das werde ich mal in die Schleife verlegen, sodass nur getrennt wird, wenn die Variable gefüllt ist.

Die beiden Tools habe ich leider nicht.
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.062 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TidTCPCLient erzeugt Stack-Overflow

  Alt 29. Okt 2014, 08:02
Die beiden Tools habe ich leider nicht.
http://madshi.net/madExceptDescription.htm -> zum ausprobieren kann man es kostenlos runter laden!
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TidTCPCLient erzeugt Stack-Overflow

  Alt 29. Okt 2014, 08:53
Vielen Dank TiGü, hatte mich aber schon für EurekaLog entschieden - muß ich nur noch installieren.

Das Ändern des Disconect / Connect in die if Sequenz hat nichts gebracht ... nun werde ich versuchen, ob EurekaLog was heraus bringt!

.. und ich muss dringend was essen ....
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: TidTCPCLient erzeugt Stack-Overflow

  Alt 29. Okt 2014, 09:25
Probiere er einmal das hier aus:
Delphi-Quellcode:
procedure TForm1.timScanTimer( Sender: TObject );
begin
  timScan.Enabled := false; // Timer anhalten
  try
    // nix im Buffer, dann brauche ich auch nicht fragen ...
    if tcpClient.IOHandler.InputBufferIsEmpty
    then
      Exit; // tschüss bis später

    tag := 5;
    Inc( intLine ); // Durchläufe zählen
    Label1.Caption := IntToStr( intLine ); // Durchläufe anzeigen
    // Application.ProcessMessages;

    tcpClient.IOHandler.CheckForDisconnect( ); // ist die Verbindung noch da?
    strLine := tcpClient.IOHandler.ReadLn; // Inhalt nach Zwischenvariable

    tcpClient.Disconnect; // Client abschalten
    try
      if strLine <> ''
      then
        begin // ein Barcode wurde erkannt
          memLog.Lines.Add( TimeToStr( now( ) ) + strLine ); // Barcode in Memo schreiben
          strLine := ''; // Zwischenvariable leeren
        end;
    finally
      tcpClient.Connect; // und Client wieder anschalten
    end;
  finally
    timScan.Enabled := true; // Timer wieder starten
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 19:01 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