我正在做广播,我什至在让事情正常工作方面都失败了。我知道我必须调用 setsockopt(),但在此之前需要什么来确保广播将发送到网络上的每个盒子?我依稀记得一些关于补充网络地址或类似的东西。我很感激帮助。
问问题
555 次
2 回答
1
您不需要使用 setsockopt()。发送到特殊地址 255.255.255.255 的 UDP 数据包将被发送到本地网络上的所有地址。
如果您要广播到的网络不是本地的,您需要使用该网络的广播地址(根据 ivymike 的评论),按照惯例,通常(但不总是)子网中的最后一个 IP。
请记住,广播地址用于许多 DOS 攻击,并且可能会被过滤。
于 2010-10-20T20:39:51.297 回答
0
对于 Windows 世界,我不太确定公认的答案是否正确。
我有一UDPSocket
堂受这个答案启发的课程。它已经使用了一段时间并且运行良好。但我只是试图用它来制作一个WakeOnLan()
广播到的函数255.255.255.255
,并且sendto()
调用失败并出现 Windows Socket Error 10013 - Permission Denied(至少在我的 Windows 7 系统上测试过)。
因此,我根据 Remy Lebeau 对这个问题的回答扩展了我的UDPSocket
构造函数,并在调用之后立即放置。这启用了广播,并且是制作我的功能的缺失环节。setsockopt()
socket()
WakeOnLan()
我并不是说这是“答案”,但评论太长了,社区维基可能希望在这个答案中编辑一个更普遍的事实,以使那些发现接受的答案不足的人受益。
于 2015-04-29T00:06:23.557 回答