gpt4 book ai didi

java - 如何告诉 Java 使用哪个接口(interface)发送多播数据

转载 作者:行者123 更新时间:2023-12-04 14:02:42 25 4
gpt4 key购买 nike

我有以下问题:

我想发送多播数据给 f.i. 224.0.12.13,但由于用户的机器可能有很多设备,数据被(显然)发送到度量最小的路由。例如,Windows 中的“路线打印”告诉我:

    ===========================================================================
Schnittstellenliste
38...00 15 5d 25 b1 ec ......Hyper-V Virtual Ethernet Adapter
33...3e 37 86 8b cd 0d ......Microsoft Wi-Fi Direct Virtual Adapter #4
47...3c 37 86 8b cd 0d ......Microsoft Wi-Fi Direct Virtual Adapter #5
7...3c 37 86 8b cd 0d ......NETGEAR A6150 WiFi USB 2.0 Adapter
1...........................Software Loopback Interface 1
===========================================================================

IPv4-Routentabelle
===========================================================================
Aktive Routen:
Netzwerkziel Netzwerkmaske Gateway Schnittstelle Metrik
0.0.0.0 0.0.0.0 192.168.10.1 192.168.10.49 35
127.0.0.0 255.0.0.0 Auf Verbindung 127.0.0.1 331
127.0.0.1 255.255.255.255 Auf Verbindung 127.0.0.1 331
127.255.255.255 255.255.255.255 Auf Verbindung 127.0.0.1 331
172.18.64.0 255.255.240.0 Auf Verbindung 172.18.64.1 271
172.18.64.1 255.255.255.255 Auf Verbindung 172.18.64.1 271
172.18.79.255 255.255.255.255 Auf Verbindung 172.18.64.1 271
192.168.10.0 255.255.255.0 Auf Verbindung 192.168.10.49 291
192.168.10.49 255.255.255.255 Auf Verbindung 192.168.10.49 291
192.168.10.255 255.255.255.255 Auf Verbindung 192.168.10.49 291
224.0.0.0 240.0.0.0 Auf Verbindung 127.0.0.1 331
224.0.0.0 240.0.0.0 Auf Verbindung 192.168.10.49 291
224.0.0.0 240.0.0.0 Auf Verbindung 172.18.64.1 271
255.255.255.255 255.255.255.255 Auf Verbindung 127.0.0.1 331
255.255.255.255 255.255.255.255 Auf Verbindung 192.168.10.49 291
255.255.255.255 255.255.255.255 Auf Verbindung 172.18.64.1 271
===========================================================================

如您所见,共有三个 224.0.0.0 路由。 Java 通常选择 172.16.64.1 网络/设备中的一个,而不是所需的 192.168.10.49

在我的代码中,我知道应该用于发送多播数据的设备名称和 IP。

但是我怎样才能克服操作系统选择具有最小指标的操作系统呢?

更改指标不是一种选择。必须能够告诉 java 在发送多播数据时使用哪个接口(interface),而不是借助路由表进行选择。

有人能帮忙吗?

我的代码片段用于测试发送和观看在 wireshark 的帮助下使用哪个接口(interface):

        int port = 5000;
String group = "224.0.23.13";

final MulticastSocket s = new MulticastSocket();
byte[] buf = new byte[10];
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) i;
}

final DatagramPacket pack = new DatagramPacket(buf, buf.length, InetAddress.getByName(group), port);
s.send(pack);

最佳答案

执行此操作的正确方法是使用 setNetworkInterface 方法,该方法为多播数据报设置传出网络接口(interface)。

MulticastSocket s = new MulticastSocket();
s.setNetworkInterface(NetworkInterface.getByName("192.168.10.49"));

关于java - 如何告诉 Java 使用哪个接口(interface)发送多播数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69484737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com