Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdTCPServer : An Gruppe verbundener Clients senden (https://www.delphipraxis.net/140753-tidtcpserver-gruppe-verbundener-clients-senden.html)

Klaus01 25. Sep 2009 16:23

Re: TIdTCPServer : An Gruppe verbundener Clients senden
 
Hallo Dominik,

Delphi-Quellcode:
  procedure TTcpClientThread.Execute;
  var
    s : AnsiString;
  begin
    while (not terminated) do
      begin
        try
          // 1.
          while not tcpClientTr.Connected do
            begin
              try
                tcpClientTr.Connect;
              except
                on E:Exception do
                  begin
                    MainFormClient.IncomingMessages.Lines.Add('Error '+E.Message);
                    sleep(5000);
                  end;
              end;
            end;
          // 2.

          if not tcpClientTr.IOHandler.InputBufferIsEmpty then
            begin
              s:= tcpClientTr.IOHandler.InputBufferAsString;
              MainFormClient.IncomingMessages.Lines.Add('Received : ' + S);
              s:='';
            end
          else
            begin
              sleep(100);
            end;

        except
          on E:Exception do
            begin
              MainFormClient.IncomingMessages.Lines.Add('Error '+E.Message);
              tcpClientTr.IOHandler.CloseGracefully;
            end;
        end;
      end;
//    tcpClientTr.Disconnect;
  end;
sodele mit dem obigen code funktioniert es.
Frage mich nicht warum.
Wenn die Stellen zwischen 1. und 2. auskommentiert werden
funktioniert es nicht mehr.
Keine Ahnung warum.

.. und noch etwas dazugelernt.
Delphi-Quellcode:
var
  i : Byte;
begin
  for i:= 0 to tcpServer.Contexts.LockList.Count -1 do
    tidContext(tcpServer.Contexts.LockList.Items[i]).Connection.IOHandler.Write('Hallo');
  tcpServer.Contexts.unLockList; // Danke an Apollonius
end;
Für das Auflisten der Clientverbindungen braucht man keine seperate Liste,
der TCPServer bringt eine mit.

Grüße
Klaus

Apollonius 25. Sep 2009 16:26

Re: TIdTCPServer : An Gruppe verbundener Clients senden
 
Das Problem hat mit dem Netzwerk nichts zu tun, sondern mit der TThreadList. Für jeden Aufruf von LockList musst du auch einmal UnlockList aufrufen. In der Sende-Routine solltest du das Resultat von LockList also in einer lokalen Variablen speichern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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 by Thomas Breitkreuz