UDP - 发送多播消息并侦听响应会产生SocketException

时间:2011-06-07 09:22:50

标签: c# udp multicast

我正在发送UDP多播消息以查找网络上的某些设备。然后我在端口5001上听取响应。

我的工作流程如下:

  1. 向本地子网发送多播“查找”消息。
  2. 网络上的任何wiznet设备都会使用我想要接收的信息包进行响应
  3. 在Windows XP上一切正常,但在Windows 7上,我得到SocketException类型的异常:*

      

    通常只允许使用每个套接字地址(协议/网络地址/端口)

    <击>

    我可以在Wireshark看到多播消息,我看到设备的响应,但我的代码没有响应。我的代码如下所示:

      public void StartListen()
      {
          SendFind();
          try {
              IPEndPoint localEp = new IPEndPoint(IPAddress.Any, 0);
              UdpClient listenClient = new UdpClient(5001);
    
              UdpState s = new UdpState();
              s.endpoint = localEp;
              s.client = listenClient;
    
              //allow time for the find to work - aka clutching at straws
              Thread.Sleep(500);
    
              while (listenClient.Available > 0)
              {
                  listenClient.BeginReceive(ReceiveCallback, s);
                  Thread.Sleep(500);
              }
          }
    
          catch (SocketException e)
          {
              Trace.WriteLine("Could not bind to socket on " + _localPort);
          }
    
          listenClient.Close();
      }
    

    ..和RecieveCallBack ..

    private void ReceiveCallback(IAsyncResult ar)
    {
        UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).client;
        IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).endpoint;
        Byte[] receiveBytes = u.EndReceive(ar, ref e);
        rxByteList.Add(receiveBytes);
        messageRxed = true;
    }
    

    **更新**

    所以我尝试了各种构造此代码的方法。似乎问题与在不同的UdpClients上发送和接收有关。我的例外是由于创建一个UdpClient在打开一个发送后立即收到 - 在发送和接收之间添加一个延迟修复了这个。

    我已将我的代码更改为使用相同的UdpClient进行发送和接收,但我仍然没有收到任何内容。

1 个答案:

答案 0 :(得分:2)

排序!这是因为我的Sendpacket使用了“udpclient.connect”,它将接收限制为提供给connect方法的端点中的所有数据。