2009-07-08 8 views
1

Tentative de monodiffusion de paquets vers les réseaux disponibles. Il y a totalement 3 réseaux. Géré pour obtenir des paquets dans un seul réseau. Mais je ne suis pas en mesure de recevoir les paquets dans différents réseaux.Problème Tentative de monodiffusion de paquets vers les réseaux disponibles

en utilisant ce code ..

 foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()) 
     { 
      foreach (var ua in i.GetIPProperties().UnicastAddresses) 
      { 
       System.Windows.Forms.MessageBox.Show(ua.Address.ToString()); 
       IPAddress Tip = IPAddress.Parse(ua.Address.ToString()); 
       IPEndPoint targetEndPoint = new IPEndPoint(Tip, iTargetPort); 
       MyUdpClient sendUdpClient = new MyUdpClient(); 
       int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint); 
      } 
     } 

Quel est le prob? Merci.

Répondre

1

Je pense que vous essayez d'envoyer des paquets à vous-même? Etes-vous sûr de ne pas confondre les adresses monodiffusion et multidiffusion?

Ok, donc vous n'êtes pas essayer de multidiffusion ...

Chacun de votre interface réseau a une adresse IP. Ce que vous faites ici envoie un paquet à votre carte réseau. Ce n'est pas vraiment une question de réseau car votre machine connaît probablement ses propres adresses IP et les redirige vers 127.0.0.1

+0

Oui Eric, j'en suis sûr. Je veux unicast les paquets aux adaptateurs de réseaux disponibles. Je suppose que le code ci-dessus le fait. Je ne reçois aucune erreur. Je suis capable d'obtenir toute l'adresse réseau et de leur envoyer les paquets. Mais ne pas recevoir les paquets dans l'adresse IP dans différentes cartes réseau. Le code doit pouvoir être unicast à toutes les cartes réseau disponibles. – Anuya

0

Je ne suis pas vraiment un gourou du réseau, mais je vais essayer de le faire . Je suppose que tous les paquets sont envoyés via l'interface par défaut qui connaît trois adresses: c'est propre, loopback et gateway. Par conséquent, un paquet de 192.168.1.111 destiné à 10.10.1.117 devrait passer par la passerelle par défaut (disons simplement que c'est 192.168.1.1), mais que se passe-t-il si 192.168.1.1 ne connaît pas la route vers 10.10.0.0, alors l'hôte de destination inaccessible droit? Je ne sais pas, c'est ma conjecture.

Bien, peut-être que je me trompe. Peut-être n'utilise-t-il pas un périphérique par défaut et utilise à la place toutes les interfaces disponibles avec la pile TCP/IP. Quoi qu'il en soit, je suis curieux de voir ce que vous trouvez. S'il-vous-plait, gardez nous au courant.

En outre, noter les adresses peut être utile. Trace route est votre ami.

1

Puisque vous avez plus d'une interface, vous êtes multi-hôte. Pour chaque interface, vous aurez une adresse IP. Donc, avec trois interfaces, vous aurez trois adresses IP locales. Lorsque vous utilisez UdpClient, vous devez spécifier quelle interface envoyer en utilisant son adresse IP.

laisse supposer que vous avez les trois suivantes adresses IP locale

10.1.0.1
10.2.0.1
10.4.0.1
avec un masque de réseau 255.255.0.0

et que vous voulez Pour envoyer un paquet UDP à 10.2.5.5, vous devez l'envoyer à 10.2.0.1, utilisez le code suivant

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.2.0.1"), 0); 
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.2.5.5"), iTargetPort); 
UdpClient sendUdpClient = new UdpClient(localEndPoint); 
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint); 

et d'envoyer un paquet UDP à 10.1.90.5 vous devez l'envoyer 10.1.0.1 donc utiliser le code suivant

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.1.0.1"), 0); 
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.1.90.5"), iTargetPort); 
UdpClient sendUdpClient = new UdpClient(localEndPoint); 
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint); 

La différence entre les deux sont les LocalEndPoint et targetEndPoint.

Questions connexes