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!

user profile iconTastaro 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

user profile iconFighter#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