Netzwerkprogrammierung - UDP Broadcast bei Linux



  • Ich arbeite an einem kleinen Dateiübertragungs-Programm in C++/Qt, das zum Auffinden von Clients im Netzwerk UDP Broadcast verwendet. Nun habe ich folgendes Szenario: Zwei PCs mit Windows sind per Crosspatch-Kabel direkt miteinander verbunden. Dann klappt das ganze ausgezeichnet. Ein Paket an die Broadcast-Addresse kommt sowohl am Rechner der das Paket gesendet hat, also auch am zweiten Rechner an.
    Läuft auf einem der beiden Linux klappt es nicht, bzw nur wenn ein Switch dazwischen hängt. Der Linux-Rechner bekommt zwar die Broadcast-Pakete von Windows, ignoriert jedoch Pakete an die Broadcast-Addresse und sendet sie nicht.

    Gibt es da irgend einen Trick oder einen Workaround?
    Vielen Dank schon mal.



  • Was du machst klingt nach einem ziemlich fiesen Hack. Für Servicediscovery gibt es Zeroconf. Für Linux gibt es zB avahi als fertige Implementierung und unter OSX/Windows gibt es Bonjour.



  • danke für die schnelle antwort.
    ich kenne bonjour, die sache ist aber, dass das programm so klein und portabel wie möglich sein soll, direkt von einem usb-stick aus startbar. insofern war die lösung mit udp broadcast sehr dankbar.
    trotzdem danke



  • js_johannes schrieb:

    Der Linux-Rechner bekommt zwar die Broadcast-Pakete von Windows, ignoriert jedoch Pakete an die Broadcast-Addresse und sendet sie nicht.

    senden und empfangen von udp-broadcasts ist was ganz normales. wahrscheinlich eine fehlkonfiguration deines linux rechners. iptables, firewall?



  • Ok, der Fehler war wohl ein völlig anderer.

    Ich habe

    udpSendSock->connectToHost(QHostAddress::Broadcast, 14999);
    

    verwendet um statt

    udpSendSock->writeDatagram(data, QHostAddress::Broadcast, 14999);
    

    einfach

    udpSendSock->write(data);
    

    vewenden zu können. Ich verwende jetzt die udpSendSock->write Variante und es klappt.


Log in to reply