8

2.1 までのすべてのバージョンで完全に動作するかなり単純なゲームがありますが、新しい 2.2 (Froyo) リリースではソケットを作成できません。nio の min パッケージを使用していますが、次の例外が発生します。

W/System.err(263): java.net.SocketException: 不正なアドレス ファミリ W/System.err(263): at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method) W/System.err(263): at 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) で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)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) で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) で

私は考えられるすべてのグーグル検索と周りを見回しましたが、何も見つかりませんでした。最も近いのは、XP および Vista マシン (私は Vista を実行しています) での ipv6 サポートに関する古い JDK バグのようです。推奨事項には、ipv6の無効化(機能しなかった)とipv4の無効化とipv6のままにすることが含まれていました(ルーターとISPがサポートしていないため、とにかくテストできなかったため機能しません)。

考えたこと、提案、私が試したことのないことはありますか?

ありがとう、ジョシュ

4

3 に答える 3

15

Joshに感謝します...上のリンクでこの問題の答えを得ることができました

セレクターを開く前にこのコードを使用する

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

私は問題を渡すことができます...

于 2010-07-12T04:34:02.007 に答える
5

これはバグであり、修正されました: http://code.google.com/p/android/issues/detail?id=9431

IPv6 が必要なデバイスやネットワークがあるため、java.net.preferIPv6Addresses の回避策には十分注意する必要があります。

(そして、元の投稿者が見つけたように、nio ではなく io を使用できる場合は、通常.)

于 2010-08-18T06:10:59.907 に答える
0

はい、あなたは正しいです。この問題を Google グループに投稿したところ、コメントは「エミュレータは IPv6 をサポートしていません」でした。ここにリンクがあり ます http://code.google.com/p/android/issues/detail?id=9431

デバイスがIPv6をサポートできるかどうかをアプリケーションが判断する理由を知っていますか? Java アプリケーションのプログラマーはそれを知る必要はないと思います。

于 2010-07-02T02:33:34.687 に答える