Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi try ClientSocket1.active:=true führt zu fehler (https://www.delphipraxis.net/8298-try-clientsocket1-active-%3Dtrue-fuehrt-zu-fehler.html)

Minz 1. Sep 2003 23:08


try ClientSocket1.active:=true führt zu fehler
 
Also ich führe regelmäßig folgenden Code aus:

Code:
procedure TForm1.PingServerTimer(Sender: TObject);
begin
       if ClientSocket1.Active=false then begin
                try
                        ClientSocket1.Open;
                        richedit1.Lines.Add('Checking Server: '+ClientSettingsIP.edit1.text);
                except
                        HandleExceptionPing;
                end;
                exit;
        end;

        if ClientSocket1.Active=true then begin
                panel4.Color:=clGreen;
                Label4.Caption:='Server Online';
        end;
end;
Dies klappt für ein paar Minuten, danach kommen dann bei jedem weiteren Prozeduraufruf Fehlermeldung á la WinSocket oder so.

Weiß jemand wieso das eine Zeit lang gut läuft und dann nicht mehr?

S - tefano 2. Sep 2003 00:07

Re: try ClientSocket1.active:=true führt zu fehler
 
Was für einen Interval hat der Timer denn?
Unter Umständen dauert das Öffnen des Sockets irgendwann länger als einen Interval, und du rufst bspw zweimal hintereinander das Open auf.

Du könntest dir ne globale Variable machen. Nen Boolean, den zu z.B, "connecting" nennst.
Nach dem Aufruf vom Open des Sockets setzt du connecting auf true, überprüfst aber vorher ob connecting vielleicht schon true ist.

Also die Modifikation:

Delphi-Quellcode:
procedure TForm1.PingServerTimer(Sender: TObject);
begin
       if ClientSocket1.Active=false and not connecting then begin
                try
                        ClientSocket1.Open;
                        connecting:= true;
                        richedit1.Lines.Add('Checking Server: '+ClientSettingsIP.edit1.text);
                except
                        HandleExceptionPing;
                end;
                exit;
        end;

        if ClientSocket1.Active=true then begin
                panel4.Color:=clGreen;
                connecting:= false;
                Label4.Caption:='Server Online';
        end;
end;
Naja, nur kann ich dir nicht 100%ig sagen, dass das die Fehlerquelle ist. Gibt Delphi bzw. die Exception dir genauere Informationen über den aufgetretenen Fehler?

Bis dann,

S - tefano

Minz 2. Sep 2003 00:26

Re: try ClientSocket1.active:=true führt zu fehler
 
Hmm, das würde aber nur Sinn machen, wenn nach dem Open-Versuch dieser Versuch noch nicht beendet wird.

Wenn der Versuch doch beendet wird, würde der Client niewieder probieren die Verbindung zu öffnen, weil immernoch connecting=true ist!

Aber vielleicht ist das wirklich der Grund, dass alle Versuche nie beendet werden, und irgendwann sind die Handles oder was weiß ich, was er für die Opens verwendet /aus/weg/verbraucht

Hmm werde das bei Gelegenheit mal testen, aber eigentlich sollte man doch davon ausgehen können, wenn nicht connected werden kann, das der Versuch dann auch beendet ist :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr.

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