2012-05-12 34 views
11

Tôi đang phát triển một ứng dụng Android và tôi cần sử dụng IPv6 để kết nối với máy chủ.Android và IPv6 trong Java

IPv6 được bật trên điện thoại và tôi có thể thấy địa chỉ IPv6 cục bộ của mình với ip addr. Tôi cũng có thể thành công ping6 điện thoại của tôi từ PC và ngược lại.

Nhưng tôi cố gắng lấy địa chỉ cục bộ trên Android thông qua lệnh Java NetworkInterface.getNetworkInterfaces() Tôi chỉ nhận được địa chỉ IPv4.

Tôi cũng đã cố gắng mở ổ cắm ứng dụng khách nhưng dòng Socket s = new Socket(MYSERVERIPV6ADDRESS, PORT); luôn ném java.net.SocketException: Invalid argument. Tôi chắc chắn địa chỉ là chính xác bởi vì tôi đã thử với cùng một mã trên máy tính của tôi và hoạt động hoàn hảo.

Dường như IPv6 được hệ điều hành hỗ trợ chứ không phải bởi máy ảo Java. Có cách nào để giải quyết vấn đề này không?

+0

Cập nhật: Sử dụng 'Ổ cắm s = ổ cắm mới (MYSERVERIPV6ADDRESS +"/64% eth0 ", PORT);' ném 'java.net.SocketException: Ngoại lệ máy chủ không xác định'. – Andrea

Trả lời

2

Sử dụng phương thức tĩnh này trong Inet6Address để có được một đối tượng Inet6Address cho địa chỉ của bạn,

Inet6Address getByAddress (String host, byte [] addr, int scope_id)

sau đó sử dụng, các nhà xây dựng ổ cắm sau đây để nhận một ổ cắm,

Ổ cắm (InetAddress dstAddress, int dstPort).

1

Hỗ trợ IP6 là sự lựa chọn của nhà cung cấp để bao gồm, với sự hiểu biết của tôi, hỗ trợ là có.

Tôi giả sử bạn đang thử nghiệm ứng dụng của bạn trong trình giả lập. Nhìn vào cách android kết nối mạng, http://developer.android.com/guide/developing/devices/emulator.html#emulatornetworking Nó nằm phía sau bộ định tuyến IPv4 được định địa chỉ 10.0.2.1. Do đó, bạn không thể mở một Socket bằng cách sử dụng IPv6. Đó là tất cả phụ thuộc nếu một con đường tồn tại của tất cả các bộ định tuyến IPv6 tương thích từ điện thoại của bạn đến đích của bạn.

+0

Không, tôi đang thử nghiệm trên Galaxy SII. IPv6 được hỗ trợ bởi điện thoại bởi vì tôi có thể thành công 'ping6' điện thoại từ PC và ngược lại. – Andrea

Các vấn đề liên quan