Question

Essayer de paquets unicast à des réseaux disponibles. Il y a au total 3 réseaux. Réussi à obtenir des paquets en une seule network.But je ne suis pas en mesure de recevoir les paquets dans des réseaux différents.

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.

Était-ce utile?

La solution

Je pense que vous essayez d'envoyer des paquets à vous?

Êtes-vous sûr que vous n'êtes pas confondre les adresses unicast et multicast?

Ok vous afin de ne pas essayer de multidiffusion ...

Chacun de l'interface réseau a une adresse IP. Ce que vous faites ici est d'envoyer un paquet à votre carte réseau. Il n'est pas vraiment une question de réseau parce que votre machine la plus connaît probablement ses propres adresses IP et réacheminer à 127.0.0.1

Autres conseils

Puisque vous avez plus d'une interface vous multiréseaux. Pour chaque interface, vous aurez un IPaddress. Donc, avec trois interfaces, vous aurez trois IP locale de. Lorsque vous utilisez le UdpClient vous devez spécifier quelle interface envoyer en utilisant c'est IP.

permet de supposer que vous avez la de trois IP locale suivante

  

10.1.0.1
  10.2.0.1
  10.4.0.1
  avec un masque de réseau de 255.255.0.0

et que vous voulez envoyer un paquet UDP à vous 10.2.5.5 devez l'envoyer 10.2.0.1 donc utiliser 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 le targetEndPoint.

Je ne suis pas beaucoup plus d'un gourou du réseau, mais je vais essayer de prendre un coup de poignard à elle. Je suppose que tous les paquets sont envoyés via l'interface par défaut qui connaît trois adresses: il est propre, réalimentation et la passerelle. Par conséquent, un paquet de 192.168.1.111 destiné à 10.10.1.117 aurait besoin de passer par la passerelle par défaut (disons que cela est 192.168.1.1), mais si 192.168.1.1 ne connaît pas la route vers 10.10.0.0, puis l'hôte de destination droit injoignable? Je ne sais pas, c'est ma conjecture.

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

En outre, notant les adresses pourrait être utile. Trace route est votre ami.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top