gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:05:12 26 4
gpt4 key购买 nike

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

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

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

我查了一下,加入多播组与它无关。即使是绑定(bind)到端口 1900 并向端口 1900 发送多播的简单测试应用程序也无法接收单播响应。

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

最佳答案

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

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

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

    解决方案1:

    You don't need change your code, just stop the SSDP discovery service. Everything should be okay.



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

    • Socket 1: bind to the port 0 or port other than 1900. Send multicast and receive unicast response from this socket.
    • Socket 2: bind to the port 1900, listen multicast notification only

    关于sockets - 我可以接收多播数据包,但不能接收单播数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144831/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com