Android 2.2 и «Семейство неверных адресов» в Socket Connect - PullRequest
8 голосов
/ 21 мая 2010

У меня довольно простая игра, которая отлично работает на каждой версии до 2.1, но с новым выпуском 2.2 (Froyo) я не могу создать сокет. Я использую пакет mina для nio и получаю следующее исключение:

W / System.err (263): java.net.SocketException: семейство неверных адресов W / System.err (263): в org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl (собственный метод) W / System.err (263): на org.apache.harmony.luni.platform.OSNetworkSystem.connect (OSNetworkSystem.java:115) W / System.err (263): в org.apache.harmony.nio.internal.SocketChannelImpl.connect (SocketChannelImpl.java:272) W / System.err (263): в org.apache.harmony.nio.internal.PipeImpl $ SinkChannelImpl.finishConnect (PipeImpl.java:164) W / System.err (263): в org.apache.harmony.nio.internal.PipeImpl. (PipeImpl.java:48) W / System.err (263): в org.apache.harmony.nio.internal.SelectorProviderImpl.openPipe (SelectorProviderImpl.java:51) W / System.err (263): в org.apache.harmony.nio.internal.SelectorImpl. (SelectorImpl.java:141) W / System.err (263): в org.apache.harmony.nio.internal.SelectorProviderImpl.openSelector (SelectorProviderImpl.java:58) W / System.err (263): на java.nio.channels.Selector.open (Selector.java:48) W / System.err (263): в org.apache.mina.transport.socket.nio.SocketConnector.startupWorker (SocketConnector.java:248) W / System.err (263): в org.apache.mina.transport.socket.nio.SocketConnector.connect (SocketConnector.java:210) W / System.err (263): в org.apache.mina.transport.socket.nio.SocketConnector.connect (SocketConnector.java:137) W / System.err (263): в org.apache.mina.common.support.BaseIoConnector.connect (BaseIoConnector.java:40)

Позже в журнале, обычно сразу после этого я получаю это:

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

Я сделал все поиски в Интернете и, оглядываясь вокруг, могу придумать и ничего не нашел. Самым близким, что я обнаружил, является старая ошибка JDK с поддержкой ipv6 на машинах с XP и Vista (у меня Vista). Рекомендации включали в себя отключение ipv6 (которое не работало) и отключение ipv4 и выход из ipv6 (у меня не будет работать, так как мой маршрутизатор и провайдер не поддерживают его и поэтому не могут его протестировать).

Какие-нибудь мысли, предложения, вещи, которые я не пробовал?

Спасибо, Джош

Ответы [ 3 ]

15 голосов
/ 12 июля 2010

Благодаря Джошу ... Я мог бы получить ответ на эту проблему по ссылке выше

используя этот код перед открытием селектора

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

я могу решить проблему ...

5 голосов
/ 18 августа 2010

это была ошибка, и она была исправлена: http://code.google.com/p/android/issues/detail?id=9431

Вы должны быть очень осторожны с обходным путем java.net.preferIPv6Addresses, потому что есть устройства и сети, где вы действительно хотите IPv6.

(и, как обнаружил первоначальный плакат, если вы можете использовать io, а не nio, обычно следует .)

0 голосов
/ 02 июля 2010

Да, вы правы. Я отправил эту проблему в группы Google, и комментарий был "эмулятор не поддерживает IPv6". Вот ссылка http://code.google.com/p/android/issues/detail?id=9431

Знаете ли вы, почему приложение должно думать, что его устройство может поддерживать iPv6 или нет? Я думаю, что программисты Java-приложений не должны знать это.

...