AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem bei Überprüfung ob Client Online ist! IndyTCP
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Überprüfung ob Client Online ist! IndyTCP

Ein Thema von Snaky · begonnen am 6. Mär 2005 · letzter Beitrag vom 7. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#1

Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 6. Mär 2005, 22:48
habe ein Problem mit der IndyTCPclient Komponente. Ich lasse mit einer For-Schleife Verbindungen zu Servern aufabeun. Fals der Server online ist wird die ip in eine TreeNode von einer Treeview eingetragen. Mein Problem ist das das Programm ohen Fehlermeldung abstürzt sobald ein Server Offline ist. Hier der Code:

Delphi-Quellcode:
procedure TfrmMain.Timer1Timer(Sender: TObject);
var i :integer;
var Kontakte : array of ttreenode;
begin
setlength(kontakte,table1.RecordCount);
tree2.Items.Clear;
tree2.items.add(nil,'Online');
tree2.items.add(nil,'Offline');
pb1.max := table1.recordcount;
pb1.visible := true;
table1.First;
for i:= 0 to table1.recordcount -1 do begin
  pb1.position := i;
  GeneralC.host := table1.fieldbyname('IP').text;

  try GeneralC.Connect;
    GeneralC.Disconnect;
    kontakte[i] := tree2.Items.AddChildFirst(tree2.Items.Item[0],table1.fieldbyname('Name').Text);
//0 ist online
    tree2.FullExpand;
  except;
//1 ist Offline
    kontakte[i] := tree2.Items.AddChildFirst(tree2.Items.Item[1],table1.fieldbyname('Name').Text);
    tree2.FullExpand;
  end;

  if not table1.Eof then table1.Next;

end;
pb1.visible := false;


end;
Ich bedanke mich schonm,al im vorraus für die Hilfe.
Snaky
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 7. Mär 2005, 10:08
Hi,

erstmal würde ich den Connect mit einem Timeout versehen !
Code:
GeneralC.Connect(5000); // 5 Sekunden
Zweitens, würde ich Dir dringenst empfehlen am am Anfang deiner Procedure den Timer auszuschalten und am Ende der Procedure den Timer wieder anzuschalten, vielleicht das ganze durch nen Try Finnally Block sichern.

Dann würde ich hingehen und Deinen Code etwas optimieren :
Code:
  // .....
  try
    GeneralC.Connect(5000); // Timeout 5 Sek.
  except
    // just catch the exception
  end;
  if GeneralC.connected then begin
    // save disconnect
    try
      GeneralC.disconnect;
    except
      // just catch it
    end;
    kontakte[i] := tree2.Items.AddChildFirst(tree2.Items.Item[0],table1.fieldbyname('Name').Text);
  end
  else begin
    // Offline
    kontakte[i] := tree2.Items.AddChildFirst(tree2.Items.Item[1],table1.fieldbyname('Name').Text);
  end;
end; // end vom For
if tree2.items.item[0].ChildCount > 0 then
  tree2.items.item[0].Fullexpand;
if tree2.items.item[1].ChildCount > 0 then
  tree2.items.item[1].Fullexpand;
Desweiteren würde ich mir noch Deinen "Online" und Deinen "Offline" Node in einer temporären Var speichern und nicht mit Item[0] und Item[1] arbeiten.

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#3

Re: Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 7. Mär 2005, 11:05
Ja aber das ist nicht wirklich ne Lösung für das Problem. Das iss ja im Mom noch Quick and Dirty!

Frage ist ja warum das abstürzt und das hat nix mit dem Timeout zu tun. Ist ja schön und gut das du da was optimierst aber damit ist mir nicht wirklich geholfen!

Trotzdem vielen dank!

Snaky
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 7. Mär 2005, 11:16
Hi,

hast du das ganze mal debugged ? Wo knallt er denn ?
Auf Anhieb ist mir von der Logik nämlich nix aufgefallen, ausser das der timer doppelt eintreten könnte.

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#5

Re: Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 7. Mär 2005, 11:21
hi,

der Timer tritt erst nach 30seks wieder ein (Also kein Doppel). Der Debugger gibt keine Fehler aus! Das Programm bleibt einfach hängen. Ka worans liegt!

Snaky
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 7. Mär 2005, 11:32
Hi,

und was passiert, wenn du ohne Timeout connectest ?
Meinst du nicht das könnte 30 sek. dauern ? und dann haste das was ich gesagt habe doppelter Timer

Gruß Data

P.S.: Bleibt einfach hängen könnte auch passieren, wenn DU kein IdAntifreeze auf der Form hast
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#7

Re: Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 7. Mär 2005, 12:32
Ja wenn der Timer den Fehler verursachen würde dann würde es ja auch nicht bei den Kontakten funitionieren die Onlinen sind. Da diese aber funktionieren kanns daran ja nicht liegen!

Snaky
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 7. Mär 2005, 12:35
Hi,

bei den online Kontakten bekommst du nen connect und musst nicht länger als den Timer-Intervall warten !

GRuß DAta
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Snaky

Registriert seit: 9. Feb 2005
26 Beiträge
 
#9

Re: Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 7. Mär 2005, 12:50
Also du meinst das so:

GeneralC.connect(Timeout...)
wenn der connected hast ja keinen Timeout.
wenn der nicht online ist dann Timeout...
Geht der das dann trotzdem in den Except Teil???

Snaky

PS: bin grad in der schule und kann das nicht ausprobieren


trotzdem Daneke
Snaky
  Mit Zitat antworten Zitat
Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Problem bei Überprüfung ob Client Online ist! IndyTCP

  Alt 7. Mär 2005, 13:09
Mal ne andere Vermutung:
Wenn du das Programm aus der Delphi-IDE heraus startest knallts immer. Probiers mal so zu starten. Aber irgendwie finde ich die Lösung auch nicht schön. Wenn du nur im LAN connecten willst solltest du dir mal UDP-Broadcasts ansehen. im Inet könntest du alle IP's auch etwas bequemer durchgehen und du bräuchtest nichtmal einen try-except Block.

Gruß
Christian
Es gibt nur 10 Typen von Menschen auf der Welt:
Die, die Binärcode verstehen und die, die es nicht tun . . .
  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 20:00 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