迁移到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);
我正在将我的应用程序从 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);