加入多播组或仅加入IP时是否需要PORT?

时间:2012-02-24 00:51:31

标签: linux sockets networking udp multicast

我想一劳永逸地学习。连接多播套接字的步骤是什么?我知道你必须绑定到本地接口(你需要IP和端口吗?)然后我知道你必须加入一个组(你需要IP:PORT,你想要加入的地址和网络接口! !! ??)然后最后你可以离开小组。

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

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

此处以及什么是多播

2 个答案:

答案 0 :(得分:5)

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

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

由于您可以绑定到Linux中的多播地址这一事实,这一点很混乱,但这似乎是一种误解,现在将永远存在于我们身上。

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

答案 1 :(得分:1)

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

Good quick explanation

Some sample source code in C and other languages