Frage

Ich habe eine Linux-Anwendung, die eine UDP-Socket öffnet und bindet es an einem Port. Ich habe keine Probleme beim Senden Unicast-Pakete über den Socket hatte. Ich hatte Gelegenheit, ein Broadcast-Paket zu senden, so dass ich aktiviert SO_BROADCAST, die die Broadcast-Pakete passieren dürfen, aber dann bemerkte ich, dass die Unicast-Pakete als auch ausgestrahlt wurden. Ist das erwartete Verhalten für ein UDP-Sockets, oder ist es wahrscheinlicher, dass ich falsch konfiguriert etwas haben?

War es hilfreich?

Lösung

Von dem, was ich verstehe, SO_BROADCAST ist eine Socket-Option. Also, wenn Sie es auf Ihrer Steckdose ermöglichen diese Buchse übertragen. Ich denke, Sie müssen verschiedene Steckdosen öffnen, wenn Sie Unicast- und Broadcast aus dem gleichen Code tun wollen.

Andere Tipps

Ich habe nicht viele Hände auf der Programmierung hier getan, aber Sie müssen wahrscheinlich mehr Informationen über die Bibliothek, OS-Version, Code usw. Vielleicht ein Codebeispiel?

zur Verfügung zu stellen

Wenn ich erinnere mich an die Bücher, die ich lesen, wenn Sie die Flagge auf den Sockel gesetzt, dass alle Datagramme aus der Steckdose geschickt beeinflussen wird, da der Socket eine im Grunde eine Datenstruktur von Netzwerk-Flags + ein Dateideskriptor.

Ich habe das gleiche Problem auf Linux heraus über eine Buchse mit Unicast- und Broadcast-zur gleichen Zeit zu bekommen. Ich löste das Problem wie folgt (Pseudo-Code):

  1. sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
    • Öffnen Sie die Buchse
  2. setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &1)
    • Ermöglicht eingehende und ausgehende Sendung von dieser Buchse
  3. bind(sock, bindaddr, sizeof(struct sockaddr) mit
  
    
      

bindaddr.sin_family = AF_INET

             

bindaddr.sin_port = <YourPort>

             

bindaddr.sin_addr.s_addr = INADDR_ANY

    
  
  • Erhalten Sie alle eingehenden Nachrichten auf jeder Karte für <YourPort>

Der Nachteil ist, dass es keine Filterung (siehe Einschränkung in 3.). So finden Sie alle Nachrichten bekommen. Die gesendeten Nachrichten werden entweder unicasted oder depedning auf die angegebene Adresse im sendto() ausgestrahlt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top