Für eine Anwendung (auf Basis von KNXNet/IP) versuche ich, Multicast über WLAN zu empfangen. Aktuell verwende ich einen kommerziellen Treiber (Falcon), mit dem das auch prima funktioniert. Aus Lizenzgründen muss ich den aber durch eine eigene Lösung ersetzen. Ich verwende Qt und habe das Beispiel http://doc.qt.io/qt-5/qtnetwork-multicastreceiver-example.html verwendet. Mein Problem ist nun: die Multicast-Pakete kommen an, wenn der kommerzielle Treiber parallel aktiv ist. Ist er nicht aktiv, kommen sie nicht an. Auch im Wireshark sind sie nicht zu sehen. Irgendwo fehlt hier eine Zutat zur Secret Sauce, aber welche? Was macht der kommerzielle Treiber anders? Google lieferte nur, dass man bind() und joinMulticastGroup() braucht, aber das ist ja drin. Die IP-Adresse ist natürlich angepasst. Der bind() geht auch auf das richtige Netzwerk-Interface, da habe ich den Code angepasst. Max Setup: Der Multicast-Sender hängt am Ethernet, Switch ist ein ungemanagter Netgear, Access Point ist ein Unifi.
Gast
#4988418
vielleicht aktiviert der treiber den promiscuous mode?
Gast
#4988426
WLAN und Multicast sind sehr speziell. Da alles Clients die Nachricht empfangen müssen, darf die Nachricht nur mit einer sehr geringen Bandbreite gesendet werden ( ich glaube sogar weniger als 11Mbit). Das wiederum führ bei vielen Nachrichten dafür das die "Luft" sehr voll ist. Also der Datendurchsatz sinkt extrem auch für anderen Teilnehmer Es gibt einige AP die wandeln Multicast in Unicast um, um das Problem zu umgehen.
@max: Das klingt plausibel. Allerdings irritiert mich, dass die Pakete im Wireshark auch nicht auftauchen - der müsste doch als erstes den promiscuous mode aktivieren, um überhaupt mitlesen zu können. @Peter II: Bandbreite ist nicht das Thema, wir reden über einzelne Nachrichten von je 17 Byte Länge. Es werden auch nicht einzelne verschluckt, sondern es taucht gar nichts auf.
Gast
#4988471
Mich hat ein Problem mit Multicasts unter W10 letzte Woche auch zur Weißglut gebracht. Verursacher war der Virtualbox-Host Only Netzwerk Adapter. Der wird meistens mit Installiert. Wenn man VMs im Bridge-Mode betreibt braucht man den aber nicht. Wohlgemerkt es geht nicht um Multicasts in VMs. Allein das Vorhandensein dieses Treibers verhinderte dass W10 Multicast-Packete empfangen konnte. Meine Tests dazu liefen unter nodejs. Ziel war das Absetzen von Multicast-Packeten von eiem ESP32 aus.
Guter Hinweis, ich habe tatsächlich auch den VirtualBox-Adapter unter Windows 10. Ich werfe ihn mal runter, auf der schwachbrüstigen Kiste läuft VirtualBox sowieso nicht. Seltsam ist es trotzdem, mit dem Falcon-Treiber geht es ja.
Gast
#4988498
Deaktivieren hat bei mir gereicht.
Das hat bei mir tatsächlich auch geholfen. Verstehe das, wer will. Vielen Dank für den Tipp! Max
Und was macht der Treiber jetzt? Deaktiviert er den VB-Adapter?
Das manuelle Deaktivieren hat geholfen. Wobei das Deaktivieren nicht der Punkt war, es geht auch anders. Wichtig war, joinMulticastGroup() nicht auf dem VM-Adapter auszuführen. KNXNet/IP-spezifisch: geplant ist, erst das Gateway zu suchen (dafür muss man der Multicast Group nicht beitreten, weil man es zwar per Multicast anspricht, die Antwort dann aber über direkt adressiertes UDP kommt). Auf den Interfaces, auf denen eine Antwort kam, wird dann Multicast aktiviert. Die Lösung ist eher hässlich, aber wenn sie funktioniert... Aktueller Code (noch ohne den geplanten Teil, sondern einfach WLAN hart eincodiert) anbei. Schönheit war kein Kriterium beim Schreiben. main.cpp
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
mainwindow.h
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
mainwindow.cpp
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.