0

ここで少し問題があります。一方ではポート 23000 でリッスンしているサーバーがあり、もう一方ではクライアントとして機能する Android アプリがあります。接続は、通常の 10.2....IP を使用してエミュレーター (ちなみにこれは 2.3.3 用にビルドされています) で機能しているように見えますが、Samsung Galaxy Tab で試してみると、次のように有名になり続けます。

「アドレスファミリはプロトコル例外でサポートされていません」

最終的に、コードは次のようになります。

InetSocketAddress inetAddress;

        //this is done to keep backward compatibility prior 2.0.4 release
        if(host == null || host.equals("")) {
            //check if defaultIp is also empty
            if (defaultIPAddress == null || defaultIPAddress.equals(""))
                throw new UnknownHostException();
            //otherwise start listening on defaultIp
            else
            {
                inetAddress = new InetSocketAddress(defaultIPAddress, port);
            }
        }
        //start listening on host
        else
        {
            inetAddress = new InetSocketAddress(host, port);
        }

        // open the socket channel
        this.channel = SocketChannel.open(inetAddress);
        this.channel.configureBlocking(false);
        this.channel.socket().setTcpNoDelay(true);

でソケットを開こうとすると失敗します

this.channel = SocketChannel.open(inetAddress);

言うまでもなく、以前に述べたように、マニフェストに必要な権限があり、これはエミュレーターで正常に機能しています。

その上、これはネットワークの問題ではありません。両方のマシンは、手元にあるルーターを使用して作成されたワイヤレスWifiに接続されており、ファイアウォール、プロキシ、完全に開いていません...

何か案は?

ありがとう!アレックス

4

1 に答える 1

0

誰かがこの質問にたどり着き、同じ問題を抱えている場合、これは、メイン アクティビティの同じスレッドでソケットを開こうとしたために発生したものです。これは、a) お勧めできず、b) もはや許可していないようです。したがって、接続コードを別のスレッドに移動すれば安全です。

于 2013-03-14T15:52:56.083 に答える