Réception de données de multidiffusion de différents groupes sur le même socket sous Linux

Supposons que je veuille recevoir des données de 239.1.2.3:20000 et de 239.4.5.6:20001 dans un programme Linux C. Puis-je le faire avec une seule prise?

Je peux bien sûr joindre plusieurs groupes sur le socket en utilisant l’option setsockopt IP_ADD_MEMBERSHIP mais, comme les ports sont différents, je ne suis pas sûr qu’il soit possible de “lier les deux ports”.

Merci.

Non, vous ne pouvez pas lier un socket à deux ports, vous avez besoin d’un socket par port.

En TCP, il doit y avoir un socket par client. En effet, le socket doit avoir une connexion “acceptée”. Cette opération est effectuée en appelant accept sur le socket d’écoute du serveur, qui renvoie un nouveau socket (avec un nouveau port) indiquant cette connexion client-serveur spécifique.

Dans UDP, il n’y a pas de “connexion”, mais vous envoyez simplement des données à un socket en espérant qu’elles y parviennent (peut-être pas). Si vous utilisez un socket UDP, tous vos clients peuvent lui envoyer des données et votre serveur n’aura pas à appeler accepter les connexions entrantes. Vous devrez créer votre propre protocole pour identifier les clients qui envoient les messages (dans ce message, vous devrez l’parsingr pour voir s’il s’agit du client 1 ou client2).

Faites-moi savoir si ce n’est pas clair.