【问题标题】:What is required to make a UDP Broadcast in C?在 C 中进行 UDP 广播需要什么?
【发布时间】:2011-04-26 15:39:33
【问题描述】:

我正在制作广播,但我什至无法让这件事发挥作用。我知道我必须调用 setsockopt(),但在此之前需要什么来确保广播将发送到网络上的每个盒子?我依稀记得一些关于补充网络地址或类似的东西。感谢您的帮助。

【问题讨论】:

  • 发布您的完整源代码。阅读手册页。
  • 微软的律师打来电话。他们说 evantravers 侵犯了他们的专利,使本地网络爬行。
  • 您必须将您的广播定向到您要广播到的子网的广播地址。欲了解更多信息:beej.us/guide/bgnet/output/html/multipage/…

标签: c udp broadcast


【解决方案1】:

对于 Windows 世界,我不太确定公认的答案是否正确。

我有一个受this answer 启发的UDPSocket 课程。它已经使用了一段时间并且运行良好。但我只是试图用它来制作一个广播到255.255.255.255WakeOnLan() 函数,而sendto() 调用失败并出现Windows Socket Error 10013 - Permission Denied(至少在我的Windows 7 系统上测试过)。

因此,我根据 Remy Lebeau 对this question 的回答,使用setsockopt() 调用扩展了我的UDPSocket 构造函数,紧接在socket() 调用之后。这启用了广播,并且是生成我的 WakeOnLan() 函数的缺失环节。

我并不是说这是“答案”,但是评论太长了,社区 wiki 可能希望在此答案中编辑更普遍的事实,以使那些发现已接受答案的人受益短。

【讨论】:

    【解决方案2】:

    您不需要使用 setsockopt()。发送到特殊地址 255.255.255.255 的 UDP 数据包将被发送到本地网络上的所有地址。

    如果您要广播到的网络不是本地网络,您需要使用该网络的广播地址(根据 ivymike 的评论),按照惯例,通常(但不总是)子网中的最后一个 IP。

    请记住,广播地址用于许多 DOS 攻击,并且可能会被过滤。

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多