2012-05-31 13 views
31

Tengo 2 programas, 1 para enviar un mensaje de difusión UDP y 1 que está escuchando esta transmisión. Mi problema es que a veces cuando envío una transmisión, el receptor recibe 2 mensajes. ¿Por qué?Envío de difusión UDP, recepción de mensajes múltiples

código del receptor: Código

public class Receiver { 
    private readonly UdpClient udp = new UdpClient(15000); 
    private void StartListening() 
    { 
    this.udp.BeginReceive(Receive, new object()); 
    } 
    private void Receive(IAsyncResult ar) 
    { 
    IPEndPoint ip = new IPEndPoint(IPAddress.Any, 15000); 
    byte[] bytes = udp.EndReceive(ar, ref ip); 
    string message = Encoding.ASCII.GetString(bytes); 
    StartListening(); 
    } 
} 

remitente:

public class Sender { 
    public void Send() { 
    UdpClient client = new UdpClient(); 
    IPEndPoint ip = new IPEndPoint(IPAddress.Broadcast, 15000); 
    byte[] bytes = Encoding.ASCII.GetBytes("Foo"); 
    client.Send(bytes, bytes.Length, ip); 
    client.Close(); 
    } 
} 
+0

hola. Quería usar tu código para la transferencia de archivos UDP. ¡pero no sé qué hacer con la parte de recepción! ¿cómo debería ser implementado? ¿Cómo va a comenzar a obtener cosas de la red? – Shamim

+0

@Shamim, hay muchos recursos en la web, un poco de google debería ayudar. Busque ejemplos de servidor/cliente. –

+0

'IPEndPoint ip = new IPEndPoint (IPAddress.Any, 15000);' puede ser 'IPEndPoint ip = null;' - no es una estructura. Su uso en el método 'EndReceive()' es definir el remitente. Poblando con cualquier cosa es un poco engañoso. – maxp

Respuesta

26

En sentido estricto, la duplicación de paquetes en la red IP está permitido el comportamiento de la red y tiene que ser capaz de tratar con él en su software incluso si de alguna manera se deshace de él esta vez. Si solo se pregunta por qué sucede esto en su caso particular ... a primera vista, no veo nada malo con su código. ¿Tiene varias direcciones IP en el puerto Ethernet de su computadora o algo así? Creo que wireshark podría ayudar a obtener más detalles sobre lo que está sucediendo.

+5

Su pregunta lo ha respondido. La conexión inalámbrica de mi portátil se conectó mientras estaba conectado a través del cable también. Así que recibí el paquete a través del cable y la conexión inalámbrica. Gracias. –

6

Los paquetes UDP no son confiables, es totalmente posible que obtenga el mismo paquete dos veces o incluso ninguno, al usar udp necesita incluir algún tipo de ID único en sus datos para que pueda descartar errores o solicita un reenvío

Cuestiones relacionadas