2009-04-14 9 views
8

In C# ich die UdpClient.Receive Funktion bin mit:UdpClient erhalten auf Broadcast-Adresse

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); 
     ... 

Jedoch habe ich eine Fassung Ausnahme sagen, bin immer, dass die Adresse mit dem Fehlercode nicht verfügbar ist 10049 Was muss ich tun, um diese Ausnahme negieren?

Antwort

16

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.

+0

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

4

für Ihre Zwecke glaube ich, dass Sie IPAddress.Any statt IPAddress.Broadcast verwenden möchten. Hoffe das hilft!

0

Dieser Fehler bedeutet, dass das Protokoll nicht an die ausgewählte IP/Port-Kombination gebunden werden kann.

Ich habe UDP Broadcast seit Ewigkeiten nicht verwendet, aber ich erinnere mich, dass Sie verschiedene IP-Bereiche verwenden müssen.

0

Es ist nichts falsch daran, wie Sie Ihren UdpClient konfiguriert haben. Hast du eine andere Portnummer ausprobiert? Vielleicht wird 1234 bereits von einer anderen App auf Ihrem System verwendet.

Verwandte Themen