2012-05-31 36 views
31

Ho 2 programmi, 1 per inviare un messaggio broadcast UDP e 1 che sta ascoltando questa trasmissione. Il mio problema è che a volte quando invio una trasmissione, il destinatario riceve 2 messaggi. Perché?Invio trasmissione UDP, ricezione di più messaggi

Codice Ricevitore: Codice

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

mittente:

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

ciao. Volevo usare il tuo codice per il trasferimento di file UDP. ma non so cosa fare con la parte Ricevi! come dovrebbe essere implementato? come comincerà a prendere roba dalla rete? – Shamim

+0

@Shamim, ci sono molte risorse sul web, un po 'di googling dovrebbe aiutare. Cerca esempi server/client. –

+0

'IPEndPoint ip = new IPEndPoint (IPAddress.Any, 15000);' può essere solo 'IPEndPoint ip = null;' - non è una struttura. Il suo uso nel metodo 'EndReceive()' è di definire il mittente. Popolarlo con qualcosa è un po 'fuorviante. – maxp

risposta

26

A rigor di termini, pacchetto duplicazione in rete IP è permesso comportamento della rete e si deve essere in grado di affrontare con esso nel tuo software anche se in qualche modo ti libererai di esso questa volta. Se ti stai chiedendo perché questo accade nel tuo caso particolare ... a prima vista non vedo nulla di sbagliato nel tuo codice. Avete diversi indirizzi IP sulla porta Ethernet del vostro computer o alcuni di questi? Penso che wireshark possa aiutare a ottenere maggiori dettagli su cosa sta succedendo.

+5

La tua domanda ha risposto. Il wireless del mio portatile è stato acceso mentre ero collegato via cavo. Quindi ho ricevuto il pacchetto tramite cavo e wireless. Grazie. –

6

I pacchetti UDP non sono affidabili, è totalmente possibile che si ottenga lo stesso pacchetto due volte o addirittura nessuno, quando si utilizza udp è necessario includere una sorta di ID univoco nei dati in modo da poter scartare gli errori o richiedere un rinvio.

Problemi correlati