AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Mehrere TIdIcmpClient funktionieren nicht richtig?
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere TIdIcmpClient funktionieren nicht richtig?

Ein Thema von Tormentor32 · begonnen am 4. Jun 2007 · letzter Beitrag vom 22. Jun 2007
Antwort Antwort
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#1

Mehrere TIdIcmpClient funktionieren nicht richtig?

  Alt 4. Jun 2007, 09:16
Hallo Leute!

Ich schreibe gerade ein Programm, welches verschiedene Verbindungen testet, indem es immer wieder einen Ping an verschiedene Hosts sendet. Hierzu benutze ich die Indy Komponente TIdIcmpClient (Indy 10). Für jeden Host wird ein Thread erzeugt, der dann jeweils einen TIdIcmpClient enthält. Die Ergebnisse werden in einer Logdatei gespeichert. Und jetzt treten zwei eigenartige Dinge auf:
Zitat:
Fall 1

1 Thread erzeugt, mit Host "www.google.de"
--> Funktioniert wie erwartet: Echo

1 weiteren Thread erzeugt mit Host "www.yahoo.de"
--> Funktioniert wie erwartet: beide Echo

Nach kurzer Zeit pingt einer der beiden nicht weiter
--> Dieser TIdIcmpCLient "steckt fest" in Der TIdIcmpClient.Ping(); Methode | Wird die Anwendung über den Debugger pausiert, dann wird erst der Timeout empfangen, vorher nicht. Das OnReply Event wird erst nach dem Pausieren gefeuert. Die Zeit zum Timout ist sehr hoch, zum beispiel 50000ms obwohl ReceiveTimout 5000 ist. Der andere Client funktioniert wie gewünscht -> Sobald einer der Clients einen Timeout erhält, bleibt er stecken, bis das Programm pausiert wurde.
Zitat:
Fall 2

1 Thread erzeugt, mit Host 192.222.222.222 (Also garantiert nicht existent)
--> Funktioniert wie erwartet: Timout

1 weiteren Thread hinzugefügt mit Host "www.google.de"
--> Beide Pings erhalten nun ein Echo, obwohl der eine Host garantiert nicht existiert. Die Zeit ist bei beiden Ergebnissen gleich -> Sie beide kriegen die gleiche Antwort
[edit]Dies ist nur so, wenn der nicht esistierende Host zuerst da ist, ansonsten tritt Fall 1 auf (Keine Antwort)[/edit]
Liegt dieses Verhalten an meinem Programm oder ist das Verhalten typisch für die TIdIcmpClients? Kann/Sollte man nur einen Client pro Anwendung benutzen?

Danke schonmal im Vorraus

Richard
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#2

Re: Mehrere TIdIcmpClient funktionieren nicht richtig?

  Alt 22. Jun 2007, 08:13
Das Problem sieht jetzt anders aus:

Also erstmal vorweg: Ich bin auf Indy9 umgestiegen.

Aber das funktioniert immer noch nicht richtig. Nehmen wir mal an ich habe

Code:
Thread1:
- Interval (Zeit, die gewartet wird bis zum nächsten Ping): 1000
- ReceiveTimeout (Zeit, bis Ping als Timeout gewertet wird): 5000
- Host: 192.111.111.111 (Existiert definitiv nicht!)
Code:
Thread2:
- Interval und ReceiveTimeout wie Thread1
- Host: 192.168.8.1 (Existiert garantiert)
Passiert zum Beispiel folgendes:

Code:
Datum | Host | Millisekunden | PingResultType(prt) | ID | ReceiveTimeout | BytesReceived

22.06.2007 08:56:59 | 192.168.8.1     | 2    | prtEcho | 1 | 5000 | 72 //Echo
22.06.2007 08:57:00 | 192.168.8.1     | 2    | prtEcho | 1 | 5000 | 72 //Echo
22.06.2007 08:57:00 | 192.111.111.111 | 2984 | prtEcho | 0 | 5000 | 0  //Echo!?!?!?!
- obwohl BytesReceived 0 ist, Echo kommt wohl, weil die Zeit bis zur Antwort 2984 ist, aber warum ist das so? ReceiveTimeout ist 5000 und trotzdem kommt eine Antwort mit BytesReceived 0 ( = Timeout!!!!). Die Zeit schwankt etwa zwischen 3000 und 3500.

Das interessante ist, je nachdem wieviele Threads ich noch hinzufüge, geht diese Zeit nach unten, wenn ich ReceiveTimeout vervierfache, wird diese Zeit verdoppelt und je näher Interval an ReceiveTimeout dran ist, desto näher ist das Ergebnis für den Timeout an ReceiveTimeout.

Meine Frage lautet weiterhin: Hat jemand schonmal ähnliche Probleme gehabt mit dem IdIcmpClient? Weiß jemand ob dies ein typisches Verhalten ist oder liegt der Fehler tatsächlich in meinem Programm... habe den gesammten Quellcode schon X-Mal durchgesehen...

Danke schonmal!

Richard
Richard Mahr
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Mehrere TIdIcmpClient funktionieren nicht richtig?

  Alt 22. Jun 2007, 17:27
Moin Richard,

warum das bei dem Indy-Client so ist kann ich Dir leider auch nicht sagen, aber vielleicht hilft es ja schon, wenn Du direkt Hier im Forum suchenIcmpSendEcho verwendest.
Das hätte dann auch den Vorteil, dass Du keine Admin-Rechte brauchst, wie beim Indy-Ping.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:08 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