Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TidTCPCLient erzeugt Stack-Overflow (https://www.delphipraxis.net/182484-tidtcpclient-erzeugt-stack-overflow.html)

rokli 29. Okt 2014 08:53

AW: TidTCPCLient erzeugt Stack-Overflow
 
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 :roll: ....

Sir Rufo 29. Okt 2014 09:25

AW: TidTCPCLient erzeugt Stack-Overflow
 
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;

divBy0 29. Okt 2014 09:59

AW: TidTCPCLient erzeugt Stack-Overflow
 
Eigentlich sollte wirklich TIdTCPServer das Richtige für die Anwendung sein. Der Barcodescanner schickt in der Regel einfach den gelesenen Barcode als Zeichenkette. Im OnExecute wird einfach gewartet bis Daten kommen und fertig.

Du verwechselt da Client und Server.

Wenn deine Anwendung der Client ist, sollte das in etwa so ablaufen:

Anwendung (Client) -> Scanner (Server) : Neue Daten?
Scanner (Server) -> Anwendung (Client) : Barcode123

Also, sollte der Scanner wirklich der Server sein, dann müsste deine Anwendung die Daten anfragen.

Du machst aber nichts anderes, als zyklisch den Empfangspuffer zu fragen, ob eine neue Zeichenkette angekommen ist.

rokli 29. Okt 2014 11:41

AW: TidTCPCLient erzeugt Stack-Overflow
 
@ Sir Rufo
Ich danke Euch für die Mühe!

Die folgende Sequenz musste ich herausnehmen, da damit gar keine Daten mehr ankamen.

Delphi-Quellcode:
    // nix im Buffer, dann brauche ich auch nicht fragen ...
    if tcpClient.IOHandler.InputBufferIsEmpty
    then
      Exit; // tschüss bis später
Aber mit Deiner Version läuft die Software bisher seit 11:24 Uhr - das hat sie noch nie getan!

@ divBy0

Die Vorgabe, dass der Scanner der Server ist, stammt aus Konfiguration des Scanners. Und daher habe ich einen Client verwendet.
Um den Scanner zum Client zu machen, muss ich mir die Konfiguration des Scanners ansehen. Wenn das ginge, könnte ich einen neuen Test programmieren, bei dem meine Software als Server fungiert.

divBy0 29. Okt 2014 13:50

AW: TidTCPCLient erzeugt Stack-Overflow
 
Vergiss' es, Denkfehler.

rokli 30. Okt 2014 15:04

AW: TidTCPCLient erzeugt Stack-Overflow
 
Hallo noch einmal!

Ich bedanke mich bei Sir Rufo, und allen Anderen, die mir wertvolle Tipps gegeben haben!

Leider kann ich das Projekt nicht zu Ende bringen - ob wohl es schon super gut lief!

Vielen Dank
Beste Grüße
Rolf


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr.
Seite 2 von 2     12   

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