2009-04-14 10 views
8

に受け取る:私はアドレスは私が何をしますか10049 エラーコードでは使用できないことを言ってソケット例外を取得していますがUdpClientは私がUdpClient.Receive機能使用していますC#でのブロードキャストアドレス

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

をこの例外を否定しますか?

答えて

16

私が現在稼働しているプロダクションアプリで使用しているコードのジストです(クライアントがサーバーアプリケーションをスタンドアロンインストールで実行している場合に対応するために少し余裕があります)。メッセージが処理できる状態になっているudp通知を受け取るのが仕事です。 Adam Alexanderが述べたように、唯一の問題は、IPAddress.Broadcastの代わりにIPAddress.Anyを使用する必要があることです。 の場合には、IPAddress.Broadcastのみを使用します。ブロードキャスト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. 

UDPクライアントを設定し、コールバックを使用して受信非同期の開始をトリガします。

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

うまくいけば、これはあまり問題なく同期的に動作するようにすることをお勧めします。あなたがしていることに非常に似ています。この後にまだエラーが発生している場合は、リッスンしようとしているポートを使用している必要があります。

だから、明確にする。

IPAddress.Any =受信に使用されます。私はどんなIPアドレスに到着してもパケットを聞きたい。 IPAddress.Broadcast =送信に使用されます。私は聞いている人にパケットを送りたい。

+0

こんにちは、私の場合、同じマシンで放送するときにエラーが発生します。あなたはこのエラーを抱えていますか? – Smith

4

私はIPAddress.Broadcastの代わりにIPAddress.Anyを使いたいと思っています。お役に立てれば!

0

このエラーは、プロトコルが選択されたIP /ポートの組み合わせにバインドできないことを意味します。

私は長年UDPブロードキャストを使用していませんでしたが、別のIP範囲を使用する必要があります。

0

あなたのUdpClientを設定する方法は何も問題ありません。あなたは別のポート番号を試しましたか?おそらく1234はあなたのシステム上ですでに別のアプリケーションによって使用されています。

関連する問題