Hallo zusammen,
ich habe folgenden Aufbau: ESP8266 läuft mit UDP Socket auf PORT 3030
(hier x)
VB-Programm auf den PC mit Sende UDPClient und Empfangs UDPClient auch
auf PORT 3030 (hier y)
Ich kann von y -> x senden (ESP Empfang), sowohl auf die IP als auch
global (224.0.0.1)
Ich kann von x -> y senden (PC Empfang), wenn ich dies auf die IP von y
tue. Wenn ich beim ESP als IP 224.0.0.1 angebe (broadcast) dann geht es
nicht. Jetzt die Frage warum nur?!
So konfiguriere ich den ESP für broadcast senden:
AT+CIPSTART="UDP","224.0.0.1",3030,3030,0
Das ist der VB-Code
1
//Variablen/Instanzen
2
DimudpClientAsNewUdpClient(0)
3
Dimrec_udpClientAsNewUdpClient(3030)
4
DimepAsIPEndPoint=NewIPEndPoint(IPAddress.Any,0)
5
6
//Sendefunktion (funktionsfähig)
7
udpClient.Connect(Form1.IP_GLOBAL_CALL,3030)
8
DimbyteCommandAsByte()=NewByte(){}
9
byteCommand=Encoding.ASCII.GetBytes(buf_name)
10
udpClient.Send(byteCommand,byteCommand.Length)
11
12
//Empfangsroutine (broadcast geht nicht!), 100ms ticking
Hast Du noch einen PC? Dann versuch mal, von dem einen Broadcast zu
senden, wenn Dein VB-Programm den empfangen kann, liegt das Problem bei
Deinem ESP8266, wenn es ihn aber nicht empfangen kann, liegt das Problem
bei Deinem VB-Programm.
Das dürfte eine wichtige Fallunterscheidung für die weitergehende
Fehlersuche sein.
Ansonsten ist die von Dir verwendete Adresse 224.0.0.1 eine
Multicast-Adresse; wenn Du nur innerhalb Deines Netzwerkes einen
UDP-Broadcast senden willst, solltest Du als Zieladresse die Adresse
Deines Netzwerks nehmen und im letzten Byte 255 eintragen.
Wenn Dein Netzwerk beispielsweise 192.168.0.xxx lautet, ist die
Broadcastadresse 192.168.0.255.
Rufus Τ. F. schrieb:> Hast Du noch einen PC? Dann versuch mal, von dem einen Broadcast zu> senden, wenn Dein VB-Programm den empfangen kann, liegt das Problem bei> Deinem ESP8266, wenn es ihn aber nicht empfangen kann, liegt das Problem> bei Deinem VB-Programm.>> Das dürfte eine wichtige Fallunterscheidung für die weitergehende> Fehlersuche sein.>> Ansonsten ist die von Dir verwendete Adresse 224.0.0.1 eine> Multicast-Adresse; wenn Du nur innerhalb Deines Netzwerkes einen> UDP-Broadcast senden willst, solltest Du als Zieladresse die Adresse> Deines Netzwerks nehmen und im letzten Byte 255 eintragen.>> Wenn Dein Netzwerk beispielsweise 192.168.0.xxx lautet, ist die> Broadcastadresse 192.168.0.255.
Danke werde ich testen. PC = Laptop (ist für mich ugs trotzdem nen PC
:))
Also wenn ich vom PC aus an multicast sende, Empfang er selbst auch
nichts. Ich denke das liegt irgendwie am VB Programm nur warum.
Kann man eigentlich eine der beiden (Broadcast oder multicast)
weiterleiten durch forwarding für Fernzugriff?
Multicast ist mehr als nur "UDP mit Adresse aus 224.0.0.0 ..
239.255.255.255"
Würde dir vorschlagen, die zugehörigen RFCs oder wenigstens die
Wikipedia-Seiten dazu zu lesen.
Marius D. schrieb:> Kann man eigentlich eine der beiden (Broadcast oder multicast)> weiterleiten durch forwarding für Fernzugriff?
Broadcast: Nein.
Multicast: Jein. 224.0.0.1 ist aber explizit "All Systems on this
Subnet", also auch extra ohne Weiterleitung.
Andere Multicasts lassen sich routen, aber da wird sich dein
Internet-Provider vermutlich querstellen, und Multicast, wenn überhaupt,
nur "in die Andere Richtung" zulassen.
Als Start müsstest du dir eine Multicast-IP reservieren lassen, laut der
Liste hier:
http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
geht das scheinbar auch für Privatpersonen.
Einfacher: Fernzugriff per VPN.
Noch einfacher, aber das willst du ja nicht hören: MQTT :)
Rufus Τ. F. schrieb:> Wenn Dein Netzwerk beispielsweise 192.168.0.xxx lautet, ist die> Broadcastadresse 192.168.0.255
Nicht unbedingt! Das hängt auch noch von der verwendeten Netzmaske ab.
Dein Broadcast gilt so nur in einem /24 Netz.
Gruss
NormalZeit
Gerhard J. schrieb:> Rufus Τ. F. schrieb:>> Wenn Dein Netzwerk beispielsweise 192.168.0.xxx lautet, ist die>> Broadcastadresse 192.168.0.255>> Nicht unbedingt! Das hängt auch noch von der verwendeten Netzmaske ab.> Dein Broadcast gilt so nur in einem /24 Netz.>> Gruss>> NormalZeit
Hatte ich auch gelesen hier:
https://en.wikipedia.org/wiki/Broadcast_address
Meine Netzmask ist: 255.255.255.0. Jetzt die Frage, wie die Broadcast
berechnet wird. Das habe ich nicht ganz verstanden.
> Andere Multicasts lassen sich routen, aber da wird sich dein> Internet-Provider vermutlich querstellen, und Multicast, wenn überhaupt,> nur "in die Andere Richtung" zulassen.>> Als Start müsstest du dir eine Multicast-IP reservieren lassen, laut der> Liste hier:> http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml> geht das scheinbar auch für Privatpersonen.>> Einfacher: Fernzugriff per VPN.>> Noch einfacher, aber das willst du ja nicht hören: MQTT :)
Ja ich weiß. 224.0.0.1 ist alle System im Netz. Genau das will ich ja.
In die eine Richtung klappt es, aber nicht in die andere. Ich weiß nur
nicht warum. Wenn ich den Packet Sender nutze, kann ich auf 224.0.0.1
auch nichts empfangen.
Wenn Multicast bidirektional läuft, dann kann ich eine Frage senden und
ALLE Geräte antworten mit NAME+IP. Und dann läuft der Rest auch wie
gehabt.
Optional wäre nun die Möglichkeit Broadcast zu nutzen, allerdings wie
Normalzeit geschrieben hat, ist das nicht so statisch wie die Multicast.
Die muss erst berechnet werden....
Marius D. schrieb:> Meine Netzmask ist: 255.255.255.0. Jetzt die Frage, wie die Broadcast> berechnet wird. Das habe ich nicht ganz verstanden.
Alle Bits, die nicht in der Netmask gesetzt sind, auf 1.
Ich habe übrigends auch mal Packet Sender, mein Terminal und ESP am
laufen. Dort sehe ich ebenfalls folgendes: Per Multicast empfängt NUR
der ESP. Selbst der Packet Sender bekommt keine Daten...
Planlos schrieb:> Marius D. schrieb:>> Meine Netzmask ist: 255.255.255.0. Jetzt die Frage, wie die Broadcast>> berechnet wird. Das habe ich nicht ganz verstanden.>> Alle Bits, die nicht in der Netmask gesetzt sind, auf 1.
Und dann mit der IP OR, richtig? Das käme hin...
Zu Multicast:
Die ESP-SDK(*) (auf der auch die AT-Firmware, die du verwendest,
aufbaut) bietet die API-funktionen igmp_joingroup und igmp_leavegroup,
um den ESP in eine Multicast-Gruppe aufzunehmen bzw wieder zu entfernen.
Ob und wie du diese Funktionen über AT-Befehle erreichen kannst, musst
du selber gucken.
*) Kommen eigentlich aus dem LWIP-Stack, sind also nicht ESP-Spezifisch.
Zu Broadcast: ja.
broadcast = ( IP & maske ) | ~maske;
Planlos schrieb:> Zu Multicast:>> Die ESP-SDK(*) (auf der auch die AT-Firmware, die du verwendest,> aufbaut) bietet die API-funktionen igmp_joingroup und igmp_leavegroup,> um den ESP in eine Multicast-Gruppe aufzunehmen bzw wieder zu entfernen.>> Ob und wie du diese Funktionen über AT-Befehle erreichen kannst, musst> du selber gucken.>>> *) Kommen eigentlich aus dem LWIP-Stack, sind also nicht ESP-Spezifisch.>>> Zu Broadcast: ja.>> broadcast = ( IP & maske ) | ~maske;
Wozu brauche ich das mit dem Aufnehmen der Adresse beim ESP?
Ich habe diese Funktion aber gerade auch bei VB gefunden, vll. liegt es
daran, dass er nicht auf Multicast reagiert?! Broadcast musste man
nämlich auch aktivieren.
Jetzt geht es am Terminal mit multicast. Mann musste erst joinen.
Allerdings wenn ich vom ESP sende mit der Konfig
"AT+CIPSTART="UDP","224.0.0.1",3030,3030,0" geht es nicht. Liegt aber
jetzt am ESP, auf der Terminalseite geht alles.
Empfangen macht er komischer weise über multicast, nur senden wohl
nicht...