c# - Envío de difusión UDP, recepción de mensajes múltiples
broadcasting (2)
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é?
Código del receptor:
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();
}
}
Código del 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();
}
}
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 solicitar un reenvío.
Estrictamente hablando, la duplicación de paquetes en la red IP tiene permitido el comportamiento de la red y usted debe ser capaz de manejarlo 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á pasando.