我可以接收多播数据包,但不能接收单播数据包

时间:2014-08-05 17:27:00

标签: sockets udp bind multicast

我有一个绑定到端口1900的套接字来监听多播数据包。这部分效果很好。我成功接收到组播数据包。

此外,我使用相同的套接字将组播数据包发送到同一个端口1900.在响应时,我希望收到一个单播数据包。根据Wireshark的说法,我的主机收到了单播数据包,但它并没有出现在套接字中。

如果删除绑定到端口1900,那么单播数据包将出现在套接字中,但在这种情况下,套接字不再接收多播数据包。

我检查过,加入多播组时没有任何内容。即使是绑定到端口1900并将多播发送到端口1900的简单测试应用也无法接收单播响应。

主要问题是使用相同的源端口和目标端口吗?或者从特定端口发送多播数据包是否会阻止套接字将单播数据包发送到同一端口?

1 个答案:

答案 0 :(得分:1)

昨天我在windows7上遇到了这个问题并找出了根本原因。 假设您正在执行SSDP MSearch,接收响应并收听SSDP通知。

  1. 开始 - >运行 - > SERVICES.MSC
  2. 检查服务" SSDP发现"。它应处于状态"已启动"
  3. UNICAST响应被此服务吃掉,永远无法访问您的套接字。

    解决方案1:

      

    您不需要更改代码,只需停止SSDP发现服务即可。   一切都应该没问题。

    解决方案2: 不需要停止SSDP发现服务。但是你需要两个插座:

      
        
    • 套接字1:绑定到端口0或1900以外的端口。发送多播并从此套接字接收单播响应。
    •   
    • 套接字2:绑定到端口1900,仅侦听多播通知
    •