UDP-Server-Broadcast

OP #6818752
Lesenswert?

Moin zusammen,

Ich habe einen Raspberry 4 und möchte gerne per Broadcast Daten vom ADC 
(Temperatur) versenden via WLAN.
Egal welche infos GOOGLE gibt, ich lande immer beim Multicast und es 
funktioniert nicht wie gewollt.
In Python scheint es generell nicht zu funktionieren.
Habt ihr Quellen für einen UDP-Broadcast-Server der immer sendet auch 
wenn mal kein Empänger da ist?

Viele Grüße aus dem Schwarzwald
Gast #6818774
Lesenswert?

Marco K. schrieb:
> der immer sendet auch wenn mal kein Empänger da ist

Charakteristisch für UDP gegenüber anderen Protokollen (z.B.
TCP) ist dass es keinen Verbindungsaufbau gibt. D.h. um ein
Paket zu senden ist es nicht relevant ob der angesprochene
Empfänger wirklich präsent ist oder nicht.
Beitrag #6818786 wurde von einem Moderator gelöscht.
Gast #6818787
Lesenswert?

Marco K. schrieb:
> Das habe ich verstanden, aber scheinbar mein das OS es muss Multicast
> verwenden, daher ist da schluss mit senden.

Nein, das Abbrechen ist Bestandteil der "User"-Implementierung,
also ein (oder mehrere) Level über UDP. Und wenn es so ist
kann "man" ja in diese Implementierung eingreifen. Was beim
UDP selbst sich etwas schwieriger gestalten würde ....
Gast #6818791
Lesenswert?

Marco K. schrieb:
> aber scheinbar mein das OS es muss Multicast
> verwenden, daher ist da schluss mit senden.

Broadcast oder Multicast ist ja per se schon "ziel-unabhängig",
das heisst man schickt eine Nachricht hinaus ohne zu wissen
ob es einer oder mehrere Teilnehmer hören und darauf reagieren.
Daher darf man auch nicht erwarten dass überhaupt ein einziger
antwortet und muss das in seiner eigenen Implementierung
berücksichtigen.
#6819300
Lesenswert?

(prx) A. K. schrieb:
> UDP Broadcasts sind so ungefähr die einfachste Form der Kommunikation,
> die überhaupt per TCP/IP möglich ist.

UDP-Broadcasts laufen nicht über TCP/IP, sondern eben über UDP/IP.

Marco K. schrieb:
> https://wiki.python.org/moin/UdpCommunication

Hast du die IP auf die Broadcast-Adresse deines Netztes geändert?
Zeig doch mal, welchen Code du genau ausgeführt hast und wie deine 
Netzwerkkonfiguration aussieht.
#6819308
Lesenswert?

(prx) A. K. schrieb:
> Danke für die Aufklärung, aber die Protokollfamilie heisst nun einmal
> TCP/IP, auch wenn weder UDP noch ICMP irgendwas mit TCP zu tun haben.

Ok, also wieder sowas, das einfach falsch in den allgemeinen 
Sprachgebrauch übergegangen ist. War mir nicht bewusst. Ich werde mich 
aber trotzdem weigern, es "TCP/IP" zu nennen, wenn TCP dabei überhaupt 
nicht vorkommt.
Gast #6819336
Lesenswert?

Achtung, Falle:

Viele/einige WLAN-Accespoints/-Router erlauben per Default keine direkte 
Kommunikation (per Broadcast) unter den Funk-Teilnehmern. D.h. die 
Clients sind voneinander isoliert.

Kann man natürlich umschalten.
OP #6820715
Lesenswert?

Dank Sascha habe ich durch Google die Lösung gefunden:
https://wiki.pythonde.pysv.org/UDP-Broadcasts
Zitat:
   1 import socket
   2
   3 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 
socket.IPPROTO_UDP)
   4 s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
   5 s.settimeout(5)
   6
   7 s.sendto("hello", ("<broadcast>", 5555))
   8 try:
   9     print "Response: %s" % s.recv(1024)
  10 except socket.timeout:
  11     print "No server found"
  12
  13 s.close()
Wobei "hello" durch alles ersetzt werden kann.

Vielen Dank euch allen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren