【发布时间】:2024-01-03 04:44:02
【问题描述】:
我正在使用 java.nio.channels.DatagramChannel 来发送和接收 UDP 多播消息。运行我的程序的盒子可以有多个网络接口。
我可以为传出数据报使用套接字选项手动指定网络接口:
NetworkInterface ni = NetworkInterface.getByName("eth0");
channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, ni);
并通过网络接口加入传入数据报的方法:
MembershipKey key = channel.join(group, ni);
但我希望我的应用使用基于路由表的默认界面。对于传出数据,这很容易。我不应该指定 IP_MULTICAST_IF 或将 null 作为网络接口传递。 Java 文档说以下内容:
"此套接字选项的初始/默认值可能为 null 以 表示输出接口将由操作选择 系统,通常基于网络路由表。”
但是传入的数据是什么。 “join”方法总是需要指定网络接口,并且不允许我传递null。
理想情况下,我希望在与该多播组完全相同的接口上加入多播组,默认情况下,该接口用于传出数据报。
有什么办法吗?
我正在使用 Java 8 和 Linux 操作系统。
【问题讨论】:
标签: java udp nio multicast multicastsocket