c++ - 如何向 C 窗口中的几个对等点发送多播消息

标签 c++ c udp winsock multicast

我正在用 C 语言为 Windows 编写一个程序,它必须向几个具有不同 IP 和端口的对等点发送消息。无需保证消息的传递。所以我希望发送不限于我所在的同一 LAN 的多播消息。

我该怎么做?我是否必须将每条消息分别发送给每个对等方,或者是否可以选择发送给每个人而无需重复?

我是否需要为每个对等点打开一个套接字连接?

谢谢, 迈克尔。

最佳答案

有两种常见的方法可以做到这一点。

UDP 单播

您在程序中维护一个 IP 地址接收者列表,遍历每个接收者并将每个数据报的拷贝发送给每个接收者。

IP多播

接收器列表必须存在于某处。如果您使用 IP 多播,则接收者列表由您的网络设备维护,通常是路由器或第 3 层交换机。在路由器中启用 Internet 组管理协议(protocol) (IGMP),然后接收者可以向路由器发送 IGMP 加入请求以将自己添加到多播组。多播组被定义为一个 IP 端点——一个 IP 地址和一个端口。在 IPv4 中,地址 224.0.0.0 到 239.255.255.255 被指定为多播地址。要向多播组的所有成员发送数据报,只需通过 UDP 单播将数据报发送一次到多播组端点。然后路由器会将数据报转发给该组的所有成员。

如果接收者与您不在同一个 LAN 上,您可能无法使用 IP 多播。 IP 多播只有在您事先知道所有可能加入您的多播组的接收者的网络路由,并确保所有网络设备都配置正确的情况下才能工作。

您不能在互联网上使用 IP 多播。

关于c++ - 如何向 C 窗口中的几个对等点发送多播消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693869/

相关文章:

C - 传递变量参数

c - 高效的堆管理器,用于大量流失、微小的分配?

c - 发送到 : Resource temporarily unavailable (errno 11)

go - 在 TCP 连接的端口上发送 UDP 数据包

C++ 多线程服务器帮助

c++ - 多变量比较是否内联未定义行为?

c - 段错误 : 11 on c program

c++ - 在 while 循环中重复函数调用

c++ - Clion 代码生成变灰

sockets - 如何使用 UDP 找到正确的发送速度?