Einzelnen Beitrag anzeigen

Bambini
(Gast)

n/a Beiträge
 
#21

AW: TIdTCPServer (Indy) und TClientSocket

  Alt 17. Nov 2016, 14:25
Aber ich muss nochmal fragen.
OnExecute wird aufgerufen. Warum sehe ich dann wiederum keine Meldung; auch wenn ich die Ausgabe ganz an den Anfgang setze:
Delphi-Quellcode:
Procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
Var
   Data:String;
Begin
   ScrollLog('OnExecute();');
   Application.ProcessMessages;

   Data:= AContext.Connection.Socket.ReadLn(); //<--- Das wartet ewig, bis da etwas kommt
   Data:= Trim(Data);   // Sonder- und Leerzeichen entfernen
   TThread.Synchronize(nil,   // threadsicherer VCL-Zugriff
      Procedure()
      Begin
         ScrollLog('[Srv]: received:');
         ScrollLog('=> ' + Data);
      End);
End;
Das OnExecute() wird von jedem IndyThread gerufen und zwar alle Nase lang, wenn du da nix machst, kommt der sofort wieder.
Und das macht jeder Thread pro Connection, egal ob da etwas auf der Leitung angekommen ist oder nicht.
Mit ReadLn legst du den schlafen, bis ReadLn etwas zurück liefert.

PS: mit  if AContext.Connection.Socket.Readable() then begin kannst abfragen, ob da etwas zum lesen gibt.

Geändert von Bambini (17. Nov 2016 um 14:34 Uhr)
  Mit Zitat antworten Zitat