Keine A. schrieb:
Ich habe ein Gerät im Netzwerk, dass mit UDP auf den Port 23000 und
Adresse 0.0.0.0 lauscht.
D.h. der Dienst läuft auf dem Gerät quasi auf allen verfügbaren Interfaces, wobei jedes Interface in einem unterschiedlichen Sub-Netz sein könnte.
Wenn ich mit boost:asio an die Adresse 0.0.0.0 einen Broadcast schicke,
kommt dieser nicht an. Wenn ich den Endpoint
"boost::asio::ip::address_v4::broadcast()" nutze, kommt der Broadcast
auch nicht an.
Hmm, na ja, wie von den anderen schon erwähnt, Broadcasts schickste normalerweise immer an die 255. Bei nem Klasse C-Netz eben an die 192.168.<subnet>.255. Ansonsten hängts, wie du selber schon geschrieben hast, eben von der Netzmaske ab, was dein Broadcast wird.
Er kommt nur an, wenn ich meine IP-Adresse nehme und die letzte Zahl
durch 255 ersetze.
Jetzt muss ich irgendwie meine eigene IP-Adresse herausfinden, die Maske
herausfinden und dass durch die passende Zahl ersetzen (welche
eigentlich?).
Formulier mal anders, was du eigentlich bezwecken willst. Aktuell versteh ich deinen Anwendungsfall so, dass dein einen Broadcast in die weite LAN-Welt schicken um zu erkennen, ob das spezifische Gerät up ist und der Server-Socket auf Verbindungen wartet?
Geht das nicht einfacher? Ebenso finde ich keine Methode, um meine
eigene IP-Adresse herauszufinden.
Wofür brauchste die denn so genau bzw. was versprichst du dir davon?
Angenommen du hast ein WLAN Klasse-C im 179er Netz und dein Server läuft aber auf nem Ethernet-Teilnehmer im 178er Netz. Irgendwo dazwischen wird dann eine Adressübersetzung gemacht - deine Client-IP hilft dir da doch nicht wirklich viel. Wenn die Verbindung zum Server-Socket da ist, ist doch gut - wat willste dann damit?
Und mal anders gefragt: wäre es nicht einfacher, beim DHCP deinen Server mit fester IP zu registrieren und den Socket abzuklopfen, ob er oben ist oder nicht?