Hier ist die Jist von Code, den ich gerade in einer Produktions-App verwende, die funktioniert (wir haben ein bisschen mehr da, um den Fall zu behandeln, wo der Client Server-Apps auf einer Standalone-Installation laufen). Es ist Aufgabe, UDP-Benachrichtigungen zu erhalten, dass Nachrichten für die Verarbeitung bereit sind. Wie von Adam Alexander erwähnt, ist Ihr einziges Problem, dass Sie IPAddress.Any anstelle von IPAddress.Broadcast verwenden müssen. Sie würden nur IPAddress.Broadcast verwenden, wenn Sie senden möchten ein Broadcast UDP-Paket.
den UDP-Client
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.
einrichten und den Beginn eines Asynchron auszulösen einen Rückruf erhalten werden.
this.udpClient.Client.Bind(this.broadcastAddress);
this.udpClient.BeginReceive(new AsyncCallback(this.ReceiveCallback), null);
Hoffentlich hilft das, Sie sollten in der Lage sein, es anzupassen, um ohne zu viel Problem synchron zu arbeiten. Sehr ähnlich wie du es tust. Wenn Sie immer noch den Fehler erhalten, dann muss etwas anderes den Port benutzen, den Sie hören wollen.
Also, um zu klären.
IPAddress.Any = Wird zum Empfangen verwendet. Ich möchte auf ein Paket warten, das auf einer beliebigen IP-Adresse ankommt. IPAddress.Broadcast = Wird zum Senden verwendet. Ich möchte ein Paket an jeden schicken, der zuhört.
Hallo, in meinem Fall bekomme ich einen Fehler beim Senden auf dem gleichen Rechner. Hast du diesen Fehler gehabt, ho cani löse dieses Problem – Smith