我必须收听“无连接UDP多播”。我有一个服务器的IP和端口。我没有任何其他信息。我该如何做到这一点?
我做了一些搜索,发现了一些提示like:
我还阅读了this有用的文章。但这篇文章是针对winsockets
的。我知道这不应该对理论产生很大的影响,在实现方面我仍然很困惑。例如,您会看到许多地方他们建议您必须致电sendto()
,然后使用sockaddr
返回的recvfrom
。但是,我不明白为什么这是建议。我们不知道地址和端口吗?是否只是为了避免手工填充结构,还是与sockaddr
的其他参数相关?
此外,在同一篇文章中,他们在调用socket时使用以下标志IPPROTO_UDP
:
SOCKET sUDPSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
这同样适用于linux吗?我在哪里可以找到这样的信息?
我正在寻找关于这个问题的可靠参考。我搜索了很多,但在Linux上找不到任何权威文章或博客。
答案 0 :(得分:2)
你说
我必须收听无连接UDP多播
在评论中,您澄清了问题的含义:
无连接意味着我不必订阅任何多播组
嗯,这是不可能的。您的计算机接收多播流量的唯一方法是让路由器将其转发给您,并且路由器仅在存在多播订阅时执行此操作。考虑替代方案:即使没有订阅,每个路由器都应转发组播数据包?但是,所有组播数据包都会在整个网络中泛滥,这将超过许多链路的可用带宽,从而有效地造成拒绝服务攻击。
如果您只想在本地网络上进行自动发现,则需要广播,而不是多播。使用与单播UDP相同的功能进行广播,不需要连接。但是,您必须使用SO_BROADCAST
启用setsockopt
选项。