Próbuję utworzyć połączenie TCP IPv6 między dwoma urządzeniami z Androidem. Jednak tworzenie gniazda zawsze kończy się niepowodzeniem.Gniazdo IPv6 na Androidzie
Gdybym oznacz ją tak:
Inet6Address dest = (Inet6Address) InetAddress.getByName(addressString);
Socket socket = new Socket(dest, portNumber);
Otrzymuję następujący wyjątek:
java.net.ConnectException: failed to connect to *address* (port *portNumber*): connect failed: EINVAL (Invalid argument)
Gdybym zamiast instancję mój adres_IPv6 obiekt tak:
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
NetworkInterface wifiInterface = null;
while (networkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = networkInterfaces.nextElement();
if (networkInterface.getDisplayName().equals("wlan0") || networkInterface.getDisplayName().equals("eth0")) {
wifiInterface = networkInterface;
break;
}
}
Inet6Address dest = Inet6Address.getByAddress(null, addressBytes, wifiInterface);
Socket socket = new Socket(dest, portNumber);
otrzymuję ten błąd podczas wywoływania konstruktora Socket:
java.net.ConnectException: failed to connect to *address* (port *portNumber*): connect failed: EADDRNOTAVAIL (Cannot assign requested address)
Zdarza się to zarówno na Galaxy Nexus z Jelly Bean i Nexus One z Gingerbread.
Czy robię coś nie tak? Jaki jest prawidłowy sposób utworzenia takiego gniazda?
również: This post sugeruje użycie konstruktora
Inet6Address getByAddress (String host, byte[] addr, int scope_id)
Co musiałbym użyć jako scope_id w tym przypadku?
Pokaż nam wartości zmiennych dest i portNumber. –
Wartość adresu addressString w pierwszym wariancie to na przykład "fe80 :: 9221: 55ff: fee3: 3303". Odpowiednia tablica addressBytes to [-2, -128, 0, 0, 0, 0, 0, 0, -110, 33, 85, -1, -2, -29, 51, 3]. Dla portu używam 3109. To ma być losowy port, który nie jest używany do niczego innego. –
Przez przypadek to router, który jest podłączony do obsługi IPv6? –