J'ai une application Linux qui ouvre un socket UDP et le lie à un port. Je n'ai eu aucun problème à envoyer des paquets unicast via le socket. J'ai eu l'occasion d'envoyer un paquet de diffusion, j'ai donc activé SO_BROADCAST, ce qui a permis aux paquets de diffusion de passer, mais j'ai ensuite remarqué que les paquets unicast étaient également diffusés. Est-ce que ce comportement est attendu pour une socket UDP, ou est-il plus probable que j'ai mal configuré quelque chose?Diffusion UDP et monodiffusion via le même socket?
Répondre
D'après ce que je comprends SO_BROADCAST est une option de socket. Donc, si vous l'activez sur votre socket, cette socket sera diffusée. Je suppose que vous devrez ouvrir des sockets différents si vous voulez faire un monodiffusion et diffuser à partir du même code.
Je n'ai pas fait grand-chose sur la programmation ici, mais vous avez probablement besoin de fournir plus d'informations sur la bibliothèque, la version du système d'exploitation, le code, etc. Peut-être un exemple de code? Si je me souviens des livres que j'ai lus, si vous définissez le drapeau sur le socket, cela affectera tous les datagrammes envoyés par le socket, car le socket est une structure de données de drapeaux réseau + un descripteur de fichier.
J'ai trouvé le même problème sous Linux pour avoir une socket en réception et diffusée en même temps. Je l'ai résolu le problème comme suit (pseudo-code):
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
- Ouvrir la prise
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &1)
- Permet la diffusion entrant et sortant de cette prise
bind(sock, bindaddr, sizeof(struct sockaddr)
avec
bindaddr.sin_family = AF_INET
bindaddr.sin_port = <YourPort>
bindaddr.sin_addr.s_addr = INADDR_ANY
- Obtenez tous les messages entrants sur une carte pour
<YourPort>
La mise en garde est qu'il n'y a pas de filtrage (voir mise en garde à 3.). Donc, vous recevrez tous les messages. Les messages envoyés sont soit dégroupés soit diffusés à l'adresse indiquée dans le champ sendto()
.
Pouvez-vous expliquer ce que cela signifie & 1? – dashesy
- 1. UDP-Diffusion sur toutes les interfaces
- 2. Écoute d'une diffusion UDP avec des threads
- 3. Diffusion UDP sur des systèmes multi-hôtes
- 4. Paquets de diffusion UDP sur des sous-réseaux
- 5. C#, socket via le routeur
- 6. méthode pour trouver le port "réel" de mon socket UDP?
- 7. Fermeture/déliaison un socket UDP en C#
- 8. Envoyer un objet sérialisé via le socket
- 9. UDP écrire à la prise et de lecture de la prise en même temps
- 10. Quel hôte utiliser pour créer une socket UDP en python?
- 11. Transfert de tampon d'octet via UDP
- 12. C: obtention du nom d'hôte à partir du socket TCP et UDP?
- 13. Génériques, héritage et diffusion
- 14. Flux et UDP
- 15. Réponse UDP
- 16. Comprendre les adresses locales assignées par le noyau sur une socket udp
- 17. Connexion via le socket MySQL avec Zend Framework
- 18. Comment envoyer un objet image via le socket ...?
- 19. Configuration dynamique du client .NET via le socket
- 20. Diffusion Web/Diffusion à l'aide de VB.NET, MYSQL et ASP.NET
- 21. Réception de messages via un socket
- 22. Envoyer int via socket en Java
- 23. Port d'achèvement d'E/S, Comment libérer le contexte par socket et le contexte d'E/S?
- 24. Téléchargement et diffusion de vidéo depuis Azure
- 25. Diffusion d'objets de différentes classes mais de même type
- 26. C# UDP vérifier si j'ai reçu le paquet entier?
- 27. Linux vers WinXP sur le décalage UDP
- 28. Sous-classement et diffusion dans l'objectif C
- 29. UDP Verrouiller?
- 30. Redirection du sous-domaine ".local" vers monodiffusion DNS
Merci. C'est ce que je cherchais. Je pensais que je m'attendais à faire quelque chose pour lequel il n'était pas conçu. Une deuxième socket devrait faire l'affaire, même si je suppose que je vais devoir me lier à un second port (bummer). –