C# UDP-发送多播消息并侦听响应会导致SocketException

C# UDP-发送多播消息并侦听响应会导致SocketException,c#,udp,multicast,C#,Udp,Multicast,我正在发送UDP多播消息以查找网络上的某些设备。然后,我在端口5001上侦听响应 我的工作流程如下: 向本地子网发送多播“查找”消息 网络上的任何设备都会响应我想要接收的信息包 在Windows XP上一切正常,但在Windows 7上,我得到了SocketException类型的异常:* 每个套接字地址(协议/网络地址/端口)通常只允许使用一次 我可以看到多播消息传出,我看到设备的响应,但我的代码没有响应。我的代码如下所示: public void StartListen() {

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

我的工作流程如下:

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

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

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

      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();
      }
    
    。。并收到回电

    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;
    }
    
    **更新**

    因此,我尝试了各种方法来构建这段代码。问题似乎与在不同的UDPClient上发送和接收有关。我的异常是由于在打开一个要发送的UdpClient后立即创建一个要接收的UdpClient而引起的-在发送和接收之间添加延迟修复了此问题


    我已经修改了代码,在发送和接收时使用相同的UdpClient,但在接收时仍然没有得到任何信息。

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

    显然已经有一个套接字绑定到端口5001。这可能是已经在运行的应用程序,也可能是您自己的代码。仔细检查您没有将多个套接字绑定到同一端口,然后尝试使用不同的端口。我可能遗漏了一些明显的内容,但我相当确定这不是问题所在。我没有其他任何东西绑定到端口5001,代码在xp上工作。也曾在一台“干净”的Windows7机器上尝试过这一点,但实际上,这不是抛出异常的地方,而是捕获异常的地方!在此之前可能通过调用
    UdpClient
    构造函数或调用
    BeginReceive
    引发异常。你能告诉我们是哪台机器吗?发送多播的程序在哪台机器上运行?对不起,这是一个愚蠢的错误,带有异常注释!它在调用UdpClient构造函数时抛出。奇怪的是,如果我从一开始就单步执行这个程序,然后调用构造函数“F10”,就不会抛出异常。。。从我的机器发送多播(win 7)