Entwickler-Ecke

Internet / Netzwerk - TIdSNTP Meldungen abschalten


derkreis - Fr 24.02.12 13:18
Titel: TIdSNTP Meldungen abschalten
Hallo,

ich verwende Indy10 TIdSNTP zum Syncron halten eines Rechners mit einem NTP-Server. Das funktioniert auch recht gut.
Leider bringt Indy immer eine Message Box Socket error irgendwas, wenn die Netzwerkverbindung im Betrieb weg bricht.

Auch mit try ... except läßt sich diese Meldung nicht unterdrücken.

Gibt es einen Weg Indy zum schweigen zu bringen?

Gruß

Ralf


Moderiert von user profile iconNarses: Topic aus Windows API verschoben am Fr 24.02.2012 um 12:27


Narses - Fr 24.02.12 13:28

Moin und :welcome: in der EE!

user profile iconderkreis hat folgendes geschrieben Zum zitierten Posting springen:
Auch mit try ... except läßt sich diese Meldung nicht unterdrücken.
Doch, das tut es, allerdings nicht (standardmäßig) in der IDE. Wenn du das Programm ohne IDE startest und einen (korrekten!) try-except-Block verwendest, dann wird keine Meldung erzeugt. ;)

cu
Narses


jaenicke - Fr 24.02.12 14:48

Es sei denn die Exception ist keine echte Exception. Dann muss man das anpassen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
// statt:
on E: Exception do
  ...
// dann eben:
on E: TObject do
  ...
Das ist aber fast nie der Fall und ich schätze mal hier war auch wieder das Starten aus der IDE schuld. ;-)


Narses - Fr 24.02.12 14:53

Moin!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Es sei denn die Exception ist keine echte Exception. Dann muss man das anpassen:
Wenn ich die gesamte Ausnahmeverarbeitung abklemmen will, dann lasse ich doch einfach die on-Klausel weg, oder? :zwinker: Aber grundsätzlich hast du schon recht. ;)

cu
Narses


jaenicke - Fr 24.02.12 16:01

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich die gesamte Ausnahmeverarbeitung abklemmen will, dann lasse ich doch einfach die on-Klausel weg, oder? :zwinker:
Dann fehlt mir aber die Exception. Wenn ich mit TObject arbeite, kann ich immer noch schauen was das ist und casten. ;-)

Und wie der Block hier aussieht, wissen wir ja nicht.


Narses - Fr 24.02.12 16:19

Moin!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich die gesamte Ausnahmeverarbeitung abklemmen will, dann lasse ich doch einfach die on-Klausel weg, oder? :zwinker:
Dann fehlt mir aber die Exception.
Dem ist nicht so, es gibt ja noch ExceptObject! :les: :idea:

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mit TObject arbeite, kann ich immer noch schauen was das ist und casten.
Sobald du eine on-Klausel hast, hast du auch unvermeidbar das "WhiteListe-Problem" und es kann dir immer was durchrutschen. Die einzige wirklich sichere Variante, um immer alle Ausnahmen abzufangen, ist keine on-Klausel nehmen. :nixweiss:

cu
Narses


derkreis - Mo 27.02.12 09:43

Hallo,

erst mal danke für die Meldungen.

ich hab den Fehler nicht in der IDE (Testen ist nicht so gut möglich) In einer VW kann ich virtuell leichter den Netzwerkstecker ziehen ohne unangenehme Randeffekte.

ich mach das so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
      try
        AktuelleZeit := Form1.IdSNTP1.DateTime;
      except
//      Hier ist das Problem mit der Socket Meldung!!!!
        Form1.sllServerZeit.Hint := 'Verbindungsproblem mit dem Zeitserver: ' + ZeitServer;
      end;
      Result := AktuelleZeit;
Die Meldung "Socket Error # 10065 No route to host" erscheint jedoch immer noch, wenn das "Netzwerkkabel" abgeklemmt wird.

Gruß

Ralf

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - Mo 27.02.12 10:26

Was hast du für eine Delphiversion? Bei aktuellen passiert das definitiv nicht.

Bist du ganz sicher, dass die Meldung an der Stelle passiert? Vielleicht baust du zur Sicherheit vorher und nachher ein ShowMessage ein um zu prüfen, falls du nicht 100% sicher bist...


derkreis - Mo 27.02.12 11:29

Hallo,

Es ist Delphi 2010. Mit Showmessage hatte ich auch Exception-Probleme. Hab mich aber durch caption-Texte an die Stelle herangetastet.

Asche auf mein Haupt:

Delphi-Quelltext
1:
      if ( MilliSecondsBetween( Now(), Form1.IdSNTP1.DateTime)  > ( MaxRange * 1000)) then begin                    
Da kam es zur Meldung. Ich hatte das glatt überlesen

Sorry nochmal

Ralf

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt