2017-12-08 5 views
0

Ich bin neu in IPv6, wenn ich versuche, einen URI mit IPv6 zu erstellen, stieß ich auf diese Ausnahme. Die vollständige Ausnahme istURISyntaxException: Ungültige% Sequenz

java.net.URISyntaxException: Invalid % sequence: %wl in authority at index 32: tcp://[fe80::ceb8:a8ff:fe23:5b84%wlan0]:1883 
at libcore.net.UriCodec.validate(UriCodec.java:58) 
at java.net.URI.parseURI(URI.java:394) 
at java.net.URI.<init>(URI.java:204) 

I-Code Ich mag dieses

String ipv6 = "tcp://[fe80::ceb8:a8ff:fe23:5b84%wlan0]:1883"; 
URI uri = new URI(ipv6); 

SocketAddress sockaddr = new InetSocketAddress(InetAddress.getByName(uri.getHost()), 1883); 
Socket socket = new Socket(); 
socket.connect(sockaddr); 

Der obige Code funktioniert ohne jede Ausnahme in Samsung Galaxy S5 mit Android 7.1.1, aber nicht Asus Zenfone GoTV und Android-Emulator sieht mit Android 5 und 6.

Weiß jemand warum?

Danke.

Antwort

0

Das Zeichen% ist ein Sonderzeichen in URLs und muss maskiert werden. Tatsächlich ist% das Escape-Zeichen. Sie können es als %25 entkommen:

String ipv6 = "tcp://[fe80::ceb8:a8ff:fe23:5b84%25wlan0]:1883"; 
+0

Leider wird dies nicht funktionieren: Auf meinem Computer Java würde dies als „Netzwerkkarte namens‚25wlan0‘“ interpretieren. –

+0

Das ist ein Bug in Java dann. Ich bin mir nicht sicher, ob du etwas dagegen tun kannst ... :( –

Verwandte Themen