Socket Connect上的Android 2.2和“Bad address family”

时间:2010-05-21 03:52:16

标签: android android-2.2-froyo

我有一个相当简单的游戏,可以在每个版本上完美地运行到2.1,但是使用新的2.2(Froyo)版本我无法创建套接字。我正在使用mio包进行nio,并获得此异常:

  

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):at org.apache.harmony.nio.internal.SocketChannelImpl.connect(SocketChannelImpl.java:272)   W / System.err(263):at org.apache.harmony.nio.internal.PipeImpl $ SinkChannelImpl.finishConnect(PipeImpl.java:164)   W / System.err(263):at org.apache.harmony.nio.internal.PipeImpl。(PipeImpl.java:48)   W / System.err(263):at org.apache.harmony.nio.internal.SelectorProviderImpl.openPipe(SelectorProviderImpl.java:51)   W / System.err(263):at org.apache.harmony.nio.internal.SelectorImpl。(SelectorImpl.java:141)   W / System.err(263):at org.apache.harmony.nio.internal.SelectorProviderImpl.openSelector(SelectorProviderImpl.java:58)   W / System.err(263):at java.nio.channels.Selector.open(Selector.java:48)   W / System.err(263):at org.apache.mina.transport.socket.nio.SocketConnector.startupWorker(SocketConnector.java:248)   W / System.err(263):at org.apache.mina.transport.socket.nio.SocketConnector.connect(SocketConnector.java:210)   W / System.err(263):at org.apache.mina.transport.socket.nio.SocketConnector.connect(SocketConnector.java:137)   W / System.err(263):at org.apache.mina.common.support.BaseIoConnector.connect(BaseIoConnector.java:40)

稍后在日志中,通常在我得到这个之后立即:

  

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

我已经完成了所有的Google搜索并环顾四周,我能想到并且一无所获。我最接近的似乎是一个旧的JDK错误,在XP和Vista机器上支持ipv6(我正在运行Vista)。建议包括禁用ipv6(不起作用)和禁用ipv4并离开ipv6(对我不起作用,因为我的路由器和ISP不支持它,因此无论如何都无法测试)。

任何想法,建议,我没有尝试过的事情?

谢谢, 约什

3 个答案:

答案 0 :(得分:15)

感谢Josh ...... 我可以在上面的链接中找到问题的答案

在打开选择器之前使用此代码

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

我可以解决问题...

答案 1 :(得分:5)

这是一个错误,已修复:http://code.google.com/p/android/issues/detail?id=9431

您应该对java.net.preferIPv6Addresses解决方法非常小心,因为有些设备和网络确实需要IPv6。

(并且,正如原始海报所发现的,如果你可以使用io而不是nio,你通常应该。)

答案 2 :(得分:0)

是的,你是对的。我将此问题发布到谷歌群组,评论是“模拟器不支持IPv6”。链接在这里 http://code.google.com/p/android/issues/detail?id=9431

你知道为什么应用程序应该认为它的设备可以支持iPv6吗?我认为java应用程序程序员不需要知道这一点。