Autor Beitrag
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: Fr 15.06.07 09:33 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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. :D

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Tastaro Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: 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

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: 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.
Tastaro Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: 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