Pregunta

Tratando de paquetes de unidifusión a las redes disponibles. Hay un total de 3 redes. Conseguido que los paquetes en un solo network.But no soy capaz de recibir los paquetes en diferentes redes.

utilizando este código ..

        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);
            }
        }

¿Cuál es el problema resuelto? Gracias.

¿Fue útil?

Solución

Creo que está intentando enviar paquetes a sí mismo?

¿Estás seguro de que no estás confundiendo direcciones unicast y multicast?

La autorización así que usted no está tratando de multidifusión ...

Cada uno de su interfaz de red tiene una dirección IP. Lo que estamos haciendo aquí es enviar un paquete a su tarjeta de red. En realidad no es una cuestión de la red debido a que su máquina más probable que conoce sus propias direcciones IP y redireccionar a 127.0.0.1

Otros consejos

Dado que usted tiene más de una interfaz que está multitarjeta. Para cada interfaz que tendrá una IPaddress. Así, con tres interfaces que tendrá tres locales de IP. Cuando se utiliza la UdpClient es necesario especificar qué interfaz para enviar a cabo mediante el uso de su propiedad intelectual.

Vamos a suponer que usted tiene los tres siguientes de IP local

  

10.1.0.1
  10.2.0.1
  10.4.0.1
  con una máscara de red de 255.255.0.0

y desea enviar un paquete UDP a 10.2.5.5 necesita enviar hacia fuera 10.2.0.1 a fin de utilizar el siguiente código

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);

y para enviar un paquete UDP a 10.1.90.5 necesita enviar hacia fuera 10.1.0.1 a fin de utilizar el siguiente código

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 diferencia entre los dos son la LocalEndPoint y la targetEndPoint.

No soy mucho de un gurú de la red, pero voy a tratar de tomar una puñalada en ella. Asumo que todos los paquetes se envían a través de la interfaz por defecto, que sabe de tres direcciones: es propia, de bucle de retorno, y la pasarela. Por lo tanto, un paquete desde 192.168.1.111 destinado a 10.10.1.117 tendría que pasar a través de la puerta de enlace predeterminada (digamos que esto es 192.168.1.1), pero lo que si 192.168.1.1 no conoce la ruta a 10.10.0.0, a continuación, host de destino derecho inalcanzable? No sé, es mi conjetura.

A pesar de que, tal vez me equivoque. Tal vez no utiliza un dispositivo por defecto y en su lugar utiliza todos los interfaces disponibles, junto con la pila TCP / IP. De todos modos, tengo curiosidad de ver lo que se encuentra sin embargo. Por favor, nos mantienen informados.

Además, anotando las direcciones podría ser útil. trazado de ruta es su amigo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top