2009-04-14 11 views
8

in C# sto usando la funzione UdpClient.Receive:classe UdpClient ricevere sul indirizzo di broadcast

public void StartUdpListener(Object state) 
    { 
     try 
     { 
      udpServer = new UdpClient(new IPEndPoint(IPAddress.Broadcast, 1234)); 
     } 
     catch (SocketException ex) 
     { 
      MessageBox.Show(ex.ErrorCode.ToString()); 
     } 

     IPEndPoint remoteEndPoint = null; 
     receivedNotification=udpServer.Receive(ref remoteEndPoint); 
     ... 

Comunque io sono sempre un'eccezione presa dicendo che l'indirizzo non è disponibile con il codice di errore 10049 Cosa devo fare per negare questa eccezione?

risposta

16

Ecco la parte di codice che sto attualmente utilizzando in un'app di produzione che funziona (abbiamo un po 'di più in là per gestire il caso in cui il client sono le applicazioni del server sono in esecuzione su un'installazione standalone). Il suo compito è ricevere notifiche udp che i messaggi siano pronti per l'elaborazione. Come menzionato da Adam Alexander, il tuo unico problema è che devi usare IPAddress.Any, invece di IPAddress.Broadcast. Dovresti utilizzare solo IPAddress.Broadcast quando vuoi Invia un pacchetto UDP di trasmissione.

impostare il client UDP

this.broadcastAddress = new IPEndPoint(IPAddress.Any, 1234); 
this.udpClient = new UdpClient(); 
this.udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
this.udpClient.ExclusiveAddressUse = false; // only if you want to send/receive on same machine. 

E per innescare l'inizio di un'asincrona ricevuti tramite un callback.

this.udpClient.Client.Bind(this.broadcastAddress); 
this.udpClient.BeginReceive(new AsyncCallback(this.ReceiveCallback), null); 

Speriamo che questo aiuta, si dovrebbe essere in grado di adattarsi a lavorare in modo sincrono senza troppo problema. Molto simile a quello che stai facendo. Se dopo questo viene ancora visualizzato l'errore, qualcos'altro deve utilizzare la porta che stai cercando di ascoltare.

Quindi, per chiarire.

IPAddress.Any = Usato per ricevere. Voglio ascoltare un pacchetto che arriva su qualsiasi indirizzo IP. IPAddress.Broadcast = Usato per inviare. Voglio inviare un pacchetto a chiunque stia ascoltando.

+0

ciao, nel mio caso viene visualizzato un errore durante la trasmissione sulla stessa macchina. hai avuto questo errore, ho cani risolvere questo problema – Smith

4

per i vostri scopi Credo che vorrete usare IPAddress.Any invece di IPAddress.Broadcast. Spero che questo ti aiuti!

0

Questo errore indica che il protocollo non può collegarsi alla combinazione IP/porta selezionata.

Non ho usato la trasmissione UDP da secoli, ma ricordo che è necessario utilizzare diversi intervalli IP.

0

Non c'è niente di sbagliato nel modo in cui hai configurato il tuo UdpClient. Hai provato un numero di porta diverso? Forse 1234 è già in uso sul tuo sistema da un'altra app.

Problemi correlati