加入多播组时需要端口还是只需要 IP?

问题描述 投票:0回答:2

我想一劳永逸地学习这一点。连接多播套接字的过程是什么?我知道你必须绑定到本地接口(你需要 IP 和端口吗?) 然后我知道你必须加入一个组(你需要 IP:PORT 作为你想要加入的地址和网络接口吗! !!??) 然后终于可以退群了。

有经验的人能解释一下这么多地址的全部内容是什么吗?我将在下面列出:

  • 绑定地址(IP:端口)
  • 网络地址(IP:端口)
  • 组播地址(IP:端口)

这里的多播在哪里、是什么?

linux sockets network-programming udp multicast
2个回答
8
投票

组播组是一个特殊的IP地址。您可以使用套接字选项

setsockopt()
通过
IP_ADD_MEMBERSHIP
加入它,或者例如在 Java 中通过
MulticastSocket.joinGroup()
。这里没有端口号。如果您想通过特定本地地址加入,请使用指定本地地址的重载,或先调用
setNetworkInterface()

绑定到本地地址是一项单独的操作,它主要确定套接字可以在哪些本地地址上发送和接收数据:一个或全部:一个本地地址,它确定您正在侦听哪个可用子网,以及可以通过或端口或两者发送。通常最好使用 INADDR_ANY 作为绑定地址,除非您的应用程序神奇地了解网络拓扑。

您可以在 Linux 中绑定到多播地址,这一事实使情况变得混乱,但这似乎是一个误解,现在将永远伴随着我们。

您可以通过发送到多播地址来发送到多播组。


1
投票

是的,您必须定义用于发送/接收多播消息的地址和端口。 这些是 UDP 数据包,因此它们需要网络堆栈的地址和端口才能将消息正确传递到参与进程。 因此,要侦听一组特定的多播消息,您的应用程序需要绑定到特定的多播 IP 地址和端口组合(显然,对于计算机上的一组或所有接口)。 该组由地址/端口组合定义。

很好的快速解释

一些C语言和其他语言的示例源代码

© www.soinside.com 2019 - 2024. All rights reserved.