linux - 加入多播组时需要 PORT 还是只需要 IP?

标签 linux sockets networking udp multicast

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

有经验的人能说清楚这么多地址的全部内容吗?我将在下面列出:

  • 绑定(bind)地址(IP:PORT)
  • 网络地址(IP:PORT)
  • 多播地址(IP:PORT)

这里的多播在哪里?

最佳答案

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

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

在 Linux 中您可以绑定(bind)到多播地址这一事实使这变得困惑,但这似乎是一个现在将永远伴随着我们的误解。

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

关于linux - 加入多播组时需要 PORT 还是只需要 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9423820/

相关文章:

sockets - dart中的readClosed是什么意思

python - 让 Python 套接字对外界可见?

c++ - Omnet++ 和 MiXiM

c++ - 使用 gdb 进行分布式软件调试

c++ - 如何使小部件可点击

sql - bash 脚本 curl 命令中的单引号不断转换为双引号

c - 创建将同时为 200 多个客户端发送/接收任务的服务器时,使用选择或多线程(或两者)更好吗

python - Linux libnetfilter_queue延迟包问题

ios - 将数据从 iOS 应用程序安全地发送到服务器上的 php 脚本

linux - awk 到变量的输出为空白,但打印不是