2012-05-12 4 views
11

Android 애플리케이션을 개발 중이며 IPv6를 사용하여 서버에 연결해야합니다.Android 및 IPv6 in Java

IPv6가 전화기에서 활성화되어 있고 ip addr으로 로컬 IPv6 주소를 볼 수 있습니다. 나는 또한 성공적으로 ping6 PC와 viceversa에서 내 전화.

그러나 나는 Java 명령을 통해 Android에서 로컬 주소를 얻으려고합니다. NetworkInterface.getNetworkInterfaces() 나는 IPv4 주소 만 얻습니다.

또한 클라이언트 소켓을 열려고했지만 Socket s = new Socket(MYSERVERIPV6ADDRESS, PORT); 은 항상 java.net.SocketException: Invalid argument을 throw합니다. 내 컴퓨터에서 동일한 코드를 사용하여 완벽하게 작동하므로 주소가 정확하다고 확신합니다.

운영 체제에서는 IPv6을 지원하지만 Java 가상 컴퓨터에서는 지원하지 않는 것으로 보입니다. 이 문제를 해결할 방법이 있습니까?

+0

업데이트 :'Socket s = 새로운 소켓 (MYSERVERIPV6ADDRESS + "/ 64 % eth0", PORT);을 사용하면'java.net.SocketException : 알 수없는 호스트 예외 '가 발생합니다. – Andrea

답변

2

를 사용하여 주소에 대한 Inet6Address를 개체를 얻을 수 Inet6Address를이 정적 메서드,

Inet6Address를 getByAddress (문자열 호스트, 바이트 [] ADDR, INT의의 scope_id)

후 사용하여 다음과 같은 소켓 생성자는 얻을 수 소켓,

소켓 (InetAddress dstAddress, int dstPort).

1

IP6 지원은 공급 업체의 선택이며, 내 이해에는 지원이 있습니다.

에뮬레이터에서 앱을 테스트한다고 가정합니다. 안드로이드가 네트워킹을하는 방식을 살펴보면, http://developer.android.com/guide/developing/devices/emulator.html#emulatornetworking 10.0.2.1 주소의 IPv4 라우터 뒤에 있습니다. 따라서 IPv6을 사용하여 소켓을 열 수 없습니다. 휴대 전화에서 목적지까지 IPv6 호환되는 모든 라우터의 경로가 존재하는 경우 모두 종속적입니다.

+0

아니, 갤럭시 SII 테스트 중이 야. 내가 성공적으로 'ping6'전화를 PC와 viceversa에서받을 수 있기 때문에 IPv6가 전화에 의해 지원됩니다. – Andrea