在C中进行UDP广播需要什么?

时间:2010-10-17 17:57:59

标签: c udp broadcast

我正在进行广播,而且即使让这件事情发挥作用,我也很失败。我知道我必须进行setsockopt()调用,但在此之前需要做些什么来确保广播将转到网络上的每个盒子?我依稀记得有关补充网络地址或类似内容的事情。我很感激帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

对于Windows世界,我不确定接受的答案是否正确。

我的UDPSocket课程受到this answer的启发。它已经使用了很长一段时间并且运行良好。但我只是尝试使用它来制作一个广播到WakeOnLan()的{​​{1}}函数,255.255.255.255调用失败,Windows Socket Error 10013 - 权限被拒绝(至少在我的Windows上测试过) 7系统)。

因此,我根据Remy Lebeau对this question的回复sendto()调用UDPSocket来扩展我的setsockopt()构建函数,该回复位于socket()调用之后。这启用了广播,并且是生成WakeOnLan()功能的缺失链接。

我并不是说这是答案"但是评论太长了,社区维基可能想在这个答案中编辑更一般的事实为了那些找到公认答案的人的利益不足。