迁移到Ipv6,如何强制使用特定范围?

Migrating to Ipv6, how to impose the use of a specific scope?

我正在将我的应用程序从 Ipv4 (TCP) 迁移到 Ipv6 (TCP)。

要联系服务器,客户端发送消息到

fe80::cc3a:61ff:fe5d:bed5

而不是

192.168.0.16

其余代码保持不变。

奇怪的是,有时有效,有时无效。找了几个小时,发现Ipv6地址(fe80::d6ae:5ff:fe43:c6e9%wlan0)的末尾加了一个"scope".

我注意到它可以是%p2p0%eth0%wlan0。知道要通过 Wi-Fi 工作,范围必须是 %wlan0,我怎么能强制使用特定范围?

我查看了所有 Inet6Address 方法,但一无所获。

MulticastSocket.setNetworkInterface() 是解决方案。

MulticastSocket multicastSocket = new MulticastSocket("5678");
NetworkInterface wifiInterface = null;
for (NetworkInterface networkInterface : Collections.list(NetworkInterface.getNetworkInterfaces()))
    if (networkInterface.getName().equalsIgnoreCase("wlan0")) {
        wifiInterface = networkInterface;
        break;
        }

multicastSocket.setNetworkInterface(wifiInterface);