【问题标题】:I can receive multicast packets, but not unicast packets我可以接收多播数据包,但不能接收单播数据包
【发布时间】:2014-08-05 17:27:00
【问题描述】:

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

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

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

我查了一下,加入一个多播组没有任何意义。即使是绑定到端口 1900 并向端口 1900 发送多播的简单测试应用程序也无法接收单播响应。

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

【问题讨论】:

  • 您能展示一下您的 socket() 和 bind() 调用的代码吗?
  • 我在 Windows 上遇到了和你一样的问题。你解决了这个问题吗?
  • 我通过使用两个套接字解决了这个问题。一个用于监听组播数据包,另一个用于发送组播请求和接收单播响应

标签: sockets udp bind multicast


【解决方案1】:

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

  1. 开始 -> 运行 -> services.msc
  2. 检查服务“SSDP 发现”。它应该处于“已启动”状态

UNICAST 响应被此服务吃掉,永远无法到达您的套接字。

解决方案 1:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2022-11-02
    • 1970-01-01
    相关资源
    最近更新 更多