AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Findcomponent TclientSocket.active := true setzen
Thema durchsuchen
Ansicht
Themen-Optionen

Findcomponent TclientSocket.active := true setzen

Ein Thema von Pet04 · begonnen am 5. Jul 2011 · letzter Beitrag vom 6. Jul 2011
Antwort Antwort
Seite 1 von 2  1 2      
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Findcomponent TclientSocket.active := true setzen

  Alt 5. Jul 2011, 11:48
Hallo zusammen,

ich erstelle dynamisch bis zu 8 clientsockets

.....
Code:
   For j := 0 To 4 do
       begin
        If (PreisLedCfg[j].IP_Ausfahrt <> '0.0.0.0') then
        begin
        try
        Price_Info_ClientSocketA:=TclientSocket.Create(self);
        with Price_Info_ClientSocketA do
        begin
          Name := 'Price_Info_ClientSocketA_'+PreisLedCfg[j].Anlage;   // A für Ausfahert
          ClientType := ctNonBlocking;
          Host := GetIPFromHost(PreisLedCfg[j].IP_Ausfahrt);//GetIPFromHost(host[i]); //IP des Zielrechners
          Port:=StrToInt(PreisLedCfg[j].Port);
          active :=true; //Aufbau der Verbindung
          OnError := Price_Info_ClientSocketA_Error;
          end; // create Price_Info_ClientSocket
          except
          end;
           // ShowMessage(Exception(ExceptObject).Message);
        end;
....

Nun habe ich das Problem, dass bei einem Onerror die Verbindung über einen Timer reconnected wird.
Dazu wollte ich über

If not (TClientsocket(FindComponent(Price_Info_ClientSock etE.Name)).active) then
//if not Price_Info_ClientSocketE.Active then
begin
Memo1.Lines.Add(Price_Info_ClientSocketE.Name +'<connection failed>');
TClientsocket(FindComponent(Price_Info_ClientSocke tE.Name)).Active := true;
//Price_Info_ClientSocketE.Active := true;
Reconnect;

den besimmten clientsocket wieder auf activ setzen.

procedure TMainForm.Reconnect;
begin
Timer_PriceInfo.Interval := Pause;
Timer_PriceInfo.Enabled := True;
Memo1.clear;
Memo1.Lines.Add(Price_Info_ClientSocketE.Name +'<attempting to reconnect in '+ IntToStr(Pause) +'ms>')
end;

aber irgendwie funktioniert es nicht, dass der clientsocket sich wieder connectet

Vielen Dank schon mal für eure Hilfe
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Findcomponent TclientSocket.active := true setzen

  Alt 5. Jul 2011, 12:09
Tja, die Reihenfolge der Befehle ist halt wichtig.
Zuerst alle Properties und Events des TClientSocket-Objekts bestücken und dann erst Active := True setzen.
Delphi-Quellcode:
// Zuerst Eventhandler zuweisen
OnError := Price_Info_ClientSocketA_Error;
// und dann erst
active :=true; //Aufbau der Verbindung
Andreas

Geändert von shmia ( 5. Jul 2011 um 13:48 Uhr)
  Mit Zitat antworten Zitat
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Findcomponent TclientSocket.active := true setzen

  Alt 5. Jul 2011, 13:06
Die Verbindungen funktionieren ja wunderbar.

erst wenn ich z.B. von einem bestimmten client das Netzwerkkabe ziehe und bis zum Fehler (OnError) warte.
Und ich die Abrfage ob der Client = Aktiv ist.
wird der richtige client wohl nicht gefunden

If not (TClientsocket(FindComponent(Price_Info_ClientSock etE.Name)).active) then
//if not Price_Info_ClientSocketE.Active then
begin
Memo1.Lines.Add(Price_Info_ClientSocketE.Name +'<connection failed>');
TClientsocket(FindComponent(Price_Info_ClientSocke tE.Name)).Active := true;
//Price_Info_ClientSocketE.Active := true;
Reconnect;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

AW: Findcomponent TclientSocket.active := true setzen

  Alt 5. Jul 2011, 13:47
Ich würde mir eine Zwischenvariable deklarieren, sonst greift man womöglich auf unterschiedliche Komponenten zu, wenn man mal etwas ändert.
Delphi-Quellcode:
var
  Sock: TClientSocket;
begin
  Sock := FindComponent(SuchString) as TClientSocket;
  if Assigned(Sock) then
    If not (Sock.active) then
      begin
        Memo1.Lines.Add(Sock.Name +'<connection failed>');
        Sock.Active := true;
        Reconnect;
      end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Findcomponent TclientSocket.active := true setzen

  Alt 5. Jul 2011, 13:50
Das Event OnError ist so deklariert:
Delphi-Quellcode:
TSocketErrorEvent = procedure (Sender: TObject; Socket: TCustomWinSocket;
    ErrorEvent: TErrorEvent; var ErrorCode: Integer) of object;
Also muss man die übergeben Parameter auch benützen und darf nicht selbst mit FindComponent() suchen.
Andreas
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#6

AW: Findcomponent TclientSocket.active := true setzen

  Alt 5. Jul 2011, 18:24
Was ihr immer mit dem FindComponent habt. Das ist totaler Müll. Pack die Sockets in eine Liste, fertig.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

AW: Findcomponent TclientSocket.active := true setzen

  Alt 5. Jul 2011, 18:31
Pack die Sockets in eine Liste, fertig.
Wo sie sich nach dem ersten Aufruf von FindComponent automatisch befindet
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Findcomponent TclientSocket.active := true setzen

  Alt 6. Jul 2011, 11:27
Das OnError event habe ich dekariert.
wie übergebe ich nun die benötigten Parameter genau ?
zur Procedue reconnect und procedure timer ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#9

AW: Findcomponent TclientSocket.active := true setzen

  Alt 6. Jul 2011, 11:32
Wie, übergeben? Wenn ein Fehler auftritt, dann sollte der Socket ein Event feuern und die Parameter zur Auswertung bestücken. Ich habe zwar ewig nichts mehr mit den Socket-Kompos gemacht, aber anders sehe ich keinen Sinn in diesem Event.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

AW: Findcomponent TclientSocket.active := true setzen

  Alt 6. Jul 2011, 11:41
Ich habe ja mehrere clients, wenn einer einen error verursacht kommmt es zum onError Event.
dann soll ja reconnectet werden.
die Procedure im Timer soll dann prüfen, ob der Client.active ist wenn nicht active setzen.
Also muß ich doch genau diesen client (der einen Fehler hat) vom Onerror Event zur Timer procedur übergeben.

Und da habe ich mein problem wie ich das genau mache.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:36 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