join多播群组时只需要一个PORT还是IP?

我想一劳永逸地学习。 什么是连接组播套接字的过程? 我知道你必须绑定到一个本地接口(你需要IP和端口吗?),那么我知道你必须join一个组(你需要IP:端口的地址你想join和networking接口了! !!)然后最后你可以离开这个组。

有经验的人可以澄清这些多个地址的全部内容吗? 我将在下面列出:

  • BindAddress(IP:PORT)
  • NetworkAddress(IP:PORT)
  • MulticastAddress(IP:PORT)

在哪里,什么是组播

多播组是一个特殊的IP地址。 您可以使用套接字选项IP_ADDMEMBERSHIP通过setsockopt()加入,或者通过Java通过MulticastSocket.joinGroup() 。 这里没有端口号。 如果要通过特定的本地地址加入,请使用指定本地地址的重载或首先调用setNetworkInterface()

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

这是因为你可以绑定到Linux的多播地址,但这似乎是一个误会,现在将永远与我们混淆。

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

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

好的快速解释

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