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.
fonte
2009-04-17 08:53:18
ciao, nel mio caso viene visualizzato un errore durante la trasmissione sulla stessa macchina. hai avuto questo errore, ho cani risolvere questo problema – Smith