2 つの Android デバイス間で IPv6 TCP 接続を作成しようとしています。ただし、ソケットの作成は常に失敗します。
次のようにインスタンス化すると:
Inet6Address dest = (Inet6Address) InetAddress.getByName(addressString);
Socket socket = new Socket(dest, portNumber);
次の例外が発生します。
java.net.ConnectException: failed to connect to *address* (port *portNumber*): connect failed: EINVAL (Invalid argument)
代わりに、IPv6Address オブジェクトを次のようにインスタンス化すると:
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);
Socket コンストラクターを呼び出すと、次のエラーが発生します。
java.net.ConnectException: failed to connect to *address* (port *portNumber*): connect failed: EADDRNOTAVAIL (Cannot assign requested address)
これは、Jelly Bean を搭載した Galaxy Nexus と Gingerbread を搭載した Nexus One の両方で発生します。
私は何か間違ったことをしていますか?そのようなソケットを作成する正しい方法は何ですか?
また:この投稿では、コンストラクターの使用を提案しています
Inet6Address getByAddress (String host, byte[] addr, int scope_id)
この場合、scope_id として何を使用する必要がありますか?