2010-10-29 5 views
2

Je suis à la recherche de gourous de réseautage pour m'aider à résoudre un problème. J'ai beaucoup d'ordinateurs exécutant mon logiciel qui utilise la multidiffusion UDP. Cela fonctionne correctement si les ordinateurs sont connectés UNIQUEMENT à un réseau (réseau A). Mon ordinateur (qui exécute également ledit logiciel) va écouter sur le port XXXX pour les multidiffusions. Cet ordinateur a deux cartes réseau et lorsque je le connecte à un autre réseau, le réseau B, mon logiciel ne fonctionne plus. Le problème est que je ne sais pas de quel réseau provient une multidiffusion donnée. Et si j'envoie une multidiffusion, je ne peux pas lui dire d'utiliser le réseau A au lieu du réseau B ou vice versa.Multicast UDP à partir d'une carte réseau spécifique

Mes questions:

  1. Y at-il un moyen de distinguer les paquets venant de différents réseaux ??
  2. Existe-t-il un moyen d'envoyer une multidiffusion au réseau A et NON au réseau B?

J'utilise des sockets C++ et Win32. Merci à tous ceux qui répondent.

Répondre

2

Vous devez écouter les paquets de multidiffusion sur l'interface à laquelle vous avez rejoint le groupe. Vous devez définir explicitement l'interface utilisée pour l'envoi des paquets de multidiffusion (sinon ils sont routés comme tout le reste, route par défaut, etc.). Les deux sont effectués via setsockopt appels. Voici quelques liens pour vous:

Avertissement: les liens sont certes Unix-centrique, de sorte que votre kilométrage Windows peut être :)

+1

En fait, ces liens sont pertinents. L'utilisation de: setsockopt avec IP_MULTICAST_IF pourrait résoudre mon problème. – MarkP

0

Travailler sur un projet avec MC UDP sur NPI redondants au cours de la dernière année, nous avons vu un problème similaire . Après avoir combattu un peu Winsock, notre solution ultime était de donner la priorité du trafic en utilisant la commande DOS route

route add 224.x.x.x ... [desired gateway] METRIC 1 

Ce que seul le trafic est sorti sur l'interface que nous voulions. Je réalise que ce n'est peut-être pas exactement ce que vous voulez, mais cela pourrait au moins être une solution provisoire lorsque vous implémentez un autre correctif.

0

Sur les hôtes multirésidents, vous devez rejoindre le groupe de multidiffusion via toutes les interfaces de manière séquentielle ou via toutes celles qui vous intéressent. Si vous êtes intéressé par le réseau d'origine, vous pouvez utiliser plusieurs sockets M/C, chacun lié à une interface différente, au même port et à chacun d'entre eux étant joints au groupe; La prise de réception elle-même vous indique alors de quel réseau provient tout trafic entrant.

Questions connexes