2010-05-21 9 views
8

Tengo un juego bastante simple que funciona perfectamente en todas las versiones ahora hasta 2.1, pero con la nueva versión 2.2 (Froyo) no puedo crear un socket. Estoy utilizando el paquete de mina de nio, y conseguir esta excepción:Android 2.2 y "familia de direcciones incorrectas" en Socket Connect

W/System.err (263): java.net.SocketException: Dirección de la familia Malo W/System.err (263): en org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl (Método nativo) W/System.err (263): en org.apache.harmony.luni.platform.OSNetworkSystem.connect (OSNetworkSystem.java:115) W/System.err (263): en org.apache.harmony.nio.internal.SocketChannelImpl.connect (SocketChannelImpl.java:272) W/System.err (263): en org.apache.harmony.nio.internal .PipeImpl $ SinkChannelImpl.finishConnect (PipeImpl.java:164) W/System.err (263): at o g.apache.harmony.nio.internal.PipeImpl. (PipeImpl.java:48) W/System.err (263): en org.apache.harmony.nio.internal.SelectorProviderImpl.openPipe (SelectorProviderImpl.java:51) W/System.err (263): en org.apache.harmony.nio.internal.SelectorImpl. (SelectorImpl.java:141) W/System.err (263): en org.apache.harmony.nio.internal .SelectorProviderImpl.openSelector (SelectorProviderImpl.java:58) W/System.err (263): en java.nio.channels.Selector.open (Selector.java:48) W/System.err (263): en org .apache.mina.transport.socket.nio.SocketConnector.startupWorker (SocketConnector.java:248) W/System.err (263): en org.apache.mina.transport.socket.nio.SocketConnector.connect (SocketConnector. java: 210) W/System.err (263): en org.apache.mina.transport.socket.nio.SocketConnector.connect (SocketCon nector.java:137) W/System.err (263): a org.apache.mina.common.support.BaseIoConnector.connect (BaseIoConnector.java:40)

Más tarde en el registro, por lo general inmediatamente después me sale esto:

W/System.err (263): java.lang.NullPointerException W/System.err (263): a org.apache.harmony.nio.internal.SelectorImpl.wakeup (SelectorImpl.java:418) W/System.err (263): en org.apache.mina.transport.socket.nio.SocketConnector.connect (SocketConnector.java:222) W/System.err (263): en org.apache.mina.transport.socket.nio.SocketConnec tor.connect (SocketConnector.java:137) W/System.err (263): a org.apache.mina.common.support.BaseIoConnector.connect (BaseIoConnector.java:40)

que he hecho todos buscando en Google y mirando alrededor puedo pensar y no encontré nada. Lo más cerca que he llegado parece ser un viejo error JDK con soporte para ipv6 en máquinas XP y Vista (estoy ejecutando Vista). Las recomendaciones incluyeron inhabilitar ipv6 (que no funcionó) y deshabilitar ipv4 y dejar ipv6 (no funcionará para mí, ya que mi enrutador y el ISP no lo admiten y, por lo tanto, no pude probarlo de todos modos).

¿Alguna idea, sugerencia, cosas que no haya intentado?

Gracias, Josh

+0

puede publicar su código de configuración del zócalo? –

+0

Hola, Rom, estoy usando una API de juegos, pero debería poder obtener el código. Curiosamente, no lo estoy usando, pero otros parecen estar teniendo el mismo problema: http://www.smartfoxserver.com/forums/viewtopic.php?p=30837&sid=74947ea6a890930771eab7fc36ab41ec Voy a ver si puedo encuentre el código que configura las cosas y publíquelo aquí. - Josh – Josh

+0

Una actualización rápida. En el proceso de tratar de encontrar el código que causa el problema en el paquete de mina, simplemente decidí que sería más fácil usar una pila diferente por completo. Al cambiarlo a una solución semi personalizada usando java.net.Socket estándar, todo funciona bien ahora. Supongamos que esto no ayudará a alguien a quedarse estancado sin esta opción, pero funcionó para mí, así que sigue adelante. - Josh – Josh

Respuesta

5

esto fue un error y se ha resuelto: http://code.google.com/p/android/issues/detail?id=9431

usted debe tener mucho cuidado con la solución java.net.preferIPv6Addresses, porque hay dispositivos y redes donde quieres IPv6.

(y, como el cartel original encontró, si puede utilizar en lugar de io nio, por lo general, debe .)

+0

Dado que realmente quiero usar NIO, ¿sabe si es posible detectar si el dispositivo tiene compatibilidad con IPV6 o no y solo aplica la solución alternativa si no es posible la compatibilidad con IPV6? ¿Alternativamente, espere hasta que haya experimentado la excepción y luego aplique la solución e intente de nuevo? – RenniePet

0

Sí, tiene usted razón. Publiqué este problema en grupos de google y el comentario fue "el emulador no admite IPv6". Aquí está el enlace http://code.google.com/p/android/issues/detail?id=9431

¿Sabe por qué la aplicación debería pensar que su dispositivo puede soportar iPv6 o no? Creo que los programadores de aplicaciones Java no necesitan saber eso.

15

Gracias a Josh ... pudiera conseguir la andswer para este problema en el enlace anterior

utilizando este código antes de abrir un selector de

==> System.setProperty ("java.net. prefieraIPv6Addresses "," false ");

me puede pasar el problema ...

+0

Funciona para mí también. – miracle2k

+0

Funciona para mí. Mi entorno es un emulador que se ejecuta en el sistema Ubuntu 10.4. –

+0

esto es una solución peligrosa en dispositivos reales. vote por favor _my_ respuesta ;-) –

Cuestiones relacionadas