Entwickler-Ecke
Internet / Netzwerk - IP suchen
Tastaro - Fr 15.06.07 09:33
Titel: IP suchen
Hallo,
mein Problem ist folgendes:
Meine Anwendung unterhält sich per TCP/IP mit Mikrocontrollern. Jeder der Controller hate eine IP innerhalb eines fest definierten IP-Bereichs (z.B. 192.168.214.11 bis 192.168.214.21 - kann auber auch größer sein).
Ich möchte nun feststellen wieviele und welche Controller (IPs) innerhalb des Bereiches gerade einschaltet und damit erreichbar sind.
Die Abfrage an sich ist kein Problem. Im Augenblick habe ich das so gelöst. dass ich einfach alle IPs im Bereich mal anpinge (IcmpSendEcho). Funktioniert auch ganz prächtig und wenn alle da sind geht das auch sehr schnell. Das Problem ist nun, dass es recht zäh wird wenn einzelne Controller nicht da sind. Da dauert das Pingen dann schon immer recht lang.
Ich habe auch schon mit SendARP rmexperimentiert, aber war leider noch langsamer.
Meine Frage ist nun: Gibt es eine schnellere Möglichkeit um die Anwesenheit der Controller festzustellen?
Beste Grüße
Tastaro
Narses - Fr 15.06.07 10:24
Moin!
Tastaro hat folgendes geschrieben: |
Im Augenblick habe ich das so gelöst. dass ich einfach alle IPs im Bereich mal anpinge (IcmpSendEcho). Funktioniert auch ganz prächtig und wenn alle da sind geht das auch sehr schnell. Das Problem ist nun, dass es recht zäh wird wenn einzelne Controller nicht da sind. Da dauert das Pingen dann schon immer recht lang.
[...]
Meine Frage ist nun: Gibt es eine schnellere Möglichkeit um die Anwesenheit der Controller festzustellen? |
IMHO geht das nicht anders. :nixweiss: (es sei denn, deine MCs können auf UDP-Broadcasts reagieren :idea:)
Du könntest aber das Pingen in einen Thread auslagern. ;) Guckst du
hier [
http://www.delphi-forum.de/topic_ICMPEchoAPI+quotPingquot+WrapperUnit_53259.html]. :D
cu
Narses
Tastaro - Fr 15.06.07 11:10
An die Threads hab ich auch schon mal gedacht. (Hatte ich wohl wieder erfolgreich aus meinen Gedanken verdrängt)
Das mit dem UDP-Broadcast hört sich ebenfalls interessant an. Prinzipiell unterstützt die API der Controller auch UDP Sockets. Mal sehen, ob sie was mit Broadcasts anfangen können (Die Firmware der Controller ist auch selbst geschrieben)
Vielen Dank für deine Antwort. Bin schonmal beruhigt, dass ich scheinnar mit meiner Lösung nicht soooo sehr daneben lag.
Beste Grüße
Tastaro
Fighter#1 - Sa 16.06.07 12:47
Du kannst ja auch einfach die TTL verkürzen, dass du jeder IP max. 50 MS zum Antworten gibst
Chryzler - Sa 16.06.07 13:59
Fighter#1 hat folgendes geschrieben: |
| Du kannst ja auch einfach die TTL verkürzen, dass du jeder IP max. 50 MS zum Antworten gibst |
Würd ich auch machen, wenn du nen Timeout von 200 ms nimmst, sollte das reichen. Man sollte aber vielleicht hinzufügen, dass TTL "Time To Live" bedeutet, was etwas komplett anderes ist als der "Timeout". Siehe
hier [
http://de.wikipedia.org/wiki/Time-to-live].
Tastaro - Mo 18.06.07 13:08
TTL verkürzen nutzt nix.
Timeout verkürzen nutzt auch nix, weil das was bi dem Ping am längsten dauert der ARP-Request ist. Ohne erfolgreichen ARP-Request wird auch nix gepingt.
Beste Grüße
Tastaro
Tastaro - Di 19.06.07 13:08
Sorry für doppel-Post.
Wollte nur sagen, dass ich meine Software etwas umgebaut habe und nun mit bis zu 64 Threads gleichzeitig pinge. Geht wunderbar! Die 64 hab ich dabei einfach durch ausprobieren ermittelt.
Beste Grüße
Tastaro
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!