首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C++和Linux收听“连接少的UDP多播”的步骤

使用C++和Linux收听“连接少的UDP多播”的步骤
EN

Stack Overflow用户
提问于 2014-07-05 20:52:29
回答 1查看 1.3K关注 0票数 0

我必须听一段“无连接UDP多播”。我有服务器的IP和端口。我没有任何其他信息。我怎样才能做到这一点?

我做了一些搜索,并找到了一些提示喜欢如下:

  1. 服务器使用recvfrom()侦听广播IP。
  2. 客户端发送一个数据包,使用广播IP上的sendto()查询服务器。
  3. 服务器从recvfrom()中的返回地址获取客户端的IP和端口
  4. 服务器从自己的IP和端口直接响应到客户端。
  5. 客户端从recvfrom()中的返回地址获取服务器的IP和端口
  6. 因为他们现在有了对方的“直通线路”,正常的通信就可以开始了。

我还读过有帮助的文章。但这篇文章是针对winsockets的。我知道这不应该对理论造成很大的影响,在执行方面我仍然很困惑。例如,您将看到在许多地方,他们建议必须调用sendto(),然后使用为recvfrom返回的sockaddr。不过,我不明白为何会有人提出这个建议。我们还不知道地址和端口吗?它只是为了避免手工填充结构,还是关于sockaddr的其他参数?

此外,在同一篇文章中,他们在调用套接字时使用了以下标志IPPROTO_UDP

代码语言:javascript
复制
SOCKET sUDPSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

同样也适用于linux吗?我在哪里可以找到这样的信息?

我正在寻找关于这个问题的可靠的参考资料。我在googled上搜索了很多,但是找不到任何权威的文章或博客在Linux上做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-05 22:10:56

你说过

我必须听一个无连接的UDP多播。

在你的评论中,你澄清了你问题的含义:

无连接意味着我不必订阅任何多播组。

那是不可能的。计算机接收多播通信量的唯一方法是由路由器将其转发给您,而路由器只在存在多播订阅时才这样做。考虑另一种选择:即使没有订阅,每个路由器都应该转发多播数据包?但是,所有的组播数据包都会被淹没在整个网络中,这将超过许多链路的可用带宽,从而有效地造成拒绝服务攻击。

如果您只想在本地网络上进行自动发现,则需要广播,而不是多播。广播是用与单播UDP相同的功能完成的,不需要连接。但是,您必须使用SO_BROADCAST启用setsockopt选项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24590474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档