Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Broadcast empfangen

0 views
Skip to first unread message

Markus Muessig

unread,
Nov 26, 2003, 11:05:00 AM11/26/03
to
Hallo Forum,
bin ein C-Anfänger (kein Programmieranfänger, dreieinhalb Jahre Java)
und stehe vor dem Problem, einen Netzwerkdaemon schreiben zu müssen,
der Broadcasts auf einem bestimmten Port empfängt!

Das Schreiben eines einfachen Serverdienstes (z.B. einen Echo-Server)
hab ich mit C schon hingekriegt...

Angeblich ist das Handlen von Broadcasts eine Sache für sich?! Kann
mir jemand Schlagwort nennen, oder ein kleines Beispiel, welches mich
in die richtige Richtung lenkt?

Ich möchte selbstverständlich keine Komplettlösung! Irgendein Tutorial,
ein kleines Beispielprogramm, etc...

Vielen Dank für euere Mühen,

Markus Müssig
--
----------------------------------------------------------------------
Markus Müssig MULTA MEDIO Informationssysteme AG
- Systemadministrator - Mergentheimer Str. 76a
97082 Wuerzburg
mailto:mmue...@multamedio.de Tel: +49 (0)931 79717-18
http://www.multamedio.de Fax: +49 (0)931 79717-30

Andreas Wiese

unread,
Nov 26, 2003, 1:15:39 PM11/26/03
to
Markus Muessig <mmue...@multamedio.de> dixit:
> Hallo Forum,

Newsgruppe.

> bin ein C-Anfänger (kein Programmieranfänger, dreieinhalb Jahre Java)
> und stehe vor dem Problem, einen Netzwerkdaemon schreiben zu müssen,
> der Broadcasts auf einem bestimmten Port empfängt!
>

AFAIK gibt's da ueberhaupt keinen Unterschied. Broadcast-Pakete werden
vom Kernel wie alle anderen Daten an deinen lauschenden Socket
uebergeben.

> Das Schreiben eines einfachen Serverdienstes (z.B. einen Echo-Server)
> hab ich mit C schon hingekriegt...
>
> Angeblich ist das Handlen von Broadcasts eine Sache für sich?! Kann
> mir jemand Schlagwort nennen, oder ein kleines Beispiel, welches mich
> in die richtige Richtung lenkt?
>

Du legst einen Datagram-Socket an, bindest ihn an einen Port und
wartest auf Daten...

[snip...]

Gruesse,

awiese
--
E prendiamo ci per mano / sui dintorni della sera / lei ci porterà
lontano / fra le luci dell' aurora / lascia fare tutto al cuore /
lascia dirgi leparole / lascia entrare / questa nuova realta
-- Konstantin Wecker / "Questa Nuova Realta"

Robert Manea

unread,
Nov 26, 2003, 2:59:27 PM11/26/03
to
Segfault in module "Markus Muessig" - dump details are as follows:

> Hallo Forum,
> bin ein C-Anfänger (kein Programmieranfänger, dreieinhalb Jahre Java)
> und stehe vor dem Problem, einen Netzwerkdaemon schreiben zu müssen,
> der Broadcasts auf einem bestimmten Port empfängt!

Broadcasting ist ganz generell eine sehr schlechte Idee - brauchst du
das wirklich?

> Angeblich ist das Handlen von Broadcasts eine Sache für sich?! Kann
> mir jemand Schlagwort nennen, oder ein kleines Beispiel, welches mich
> in die richtige Richtung lenkt?

Wie bereits oben erwähnt ist Broadcasting nicht ganz trivial, da eine
Menge Probleme auftreten können die es alle abzufangen gilt (z.B.
Interfaces mit mehreren IP-Aliases).

Ausserdem ist Broadcasting nur in Kombination mit UDP Sockets nutzbar,
was die Sache leider nicht wirklich einfacher macht (floating window
gibts hier nicht, also muss man sich selber um den Empfangsbuffer
kümmern).

> Ich möchte selbstverständlich keine Komplettlösung! Irgendein Tutorial,
> ein kleines Beispielprogramm, etc...

Das beste "Tutorial" ist sicherlich: W. Richard Stevens,
UNIX Network Programming

Zu finden in der Bibliothek einer Universität/FH in Deiner Nähe.


Aber um ein wenig konkreter auf Deine Frage einzugehen:

* UDP (SOCK_DGRAM) Socket anlegen

* mit 'setsockopt()' und 'SO_BROADCAST' der Anwendung erlauben
Broadcast Pakete zu empfangen/senden

* den Socket an die Broadcastadresse des/der Interfaces
'bind()'en

* zusätlich empfiehlt es sich auch die "Wildcardadresse"
255.255.255.255 zu 'bind()'en

* mit 'recvfrom()' und 'sendto()' Daten austauschen


> Vielen Dank für euere Mühen,
> Markus Müssig


Grüße, Rob

--
On the internet, nobody knows if you're Turing-complete.

Oliver Battenfeld

unread,
Nov 27, 2003, 11:18:25 AM11/27/03
to
Robert Manea schrieb:

Hi,

> Ausserdem ist Broadcasting nur in Kombination mit UDP Sockets
> nutzbar, was die Sache leider nicht wirklich einfacher macht
> (floating window gibts hier nicht, also muss man sich selber
> um den Empfangsbuffer kümmern).

nicht jeder braucht und will TCP.

> * mit 'setsockopt()' und 'SO_BROADCAST' der Anwendung erlauben
> Broadcast Pakete zu empfangen/senden

Das ist nur für den Sendevorgang nötig. Die Payload von empfangenen
UDP-Paketen sollte auch so am Socket ankommen, entspr. bind()
vorausgesetzt.

Die Empfehlung für das bzw. die Stevens-Bücher kann ich auch nur nochmal
unterstreichen, dort mangelt es insbesondere nicht an Beispielen. Leider
ist der gute Mann mittlerweile verstorben, die letzten Auflagen sind nicht
mehr ganz taufrisch, aber noch gut benutzbar.
--
Gruss,
Oliver

0 new messages