2

私の Android プロジェクトでは、Faye クライアントを実装しました。しかし、 を呼び出すSocketChannel.socket().connect(...)と、接続がハングし、次の行が実行されません。タイムアウトを設定しないか、タイムアウトのために切断するかのようです。

Thread.currentThread().setName("WebSocketConnector");
try {
    // "java.net.SocketException: Address family not supported by protocol"
    System.setProperty("java.net.preferIPv6Addresses", "false");

    mTransportChannel = SocketChannel.open();
    // mTransportChannel.configureBlocking(false);
    // the following will block until connection was established or
    // an error occurred!
    mTransportChannel.socket().connect(
            new InetSocketAddress(mWsHost, mWsPort), mOptions.getSocketConnectTimeout());
    Log.i(TAG, "Socket connected");
    // before doing any data transfer on the socket, set socket
    // options
    mTransportChannel.socket().setSoTimeout(
            mOptions.getSocketReceiveTimeout());
    mTransportChannel.socket().setTcpNoDelay(
            mOptions.getTcpNoDelay());

    return null;
} catch (IOException e) {
    Log.e(TAG, e.getMessage());
    return e.getMessage();
}

私がそうした場合:

mTransportChannel = SocketChannel.open();
mTransportChannel.configureBlocking(false);
mTransportChannel.connect(socketAddress);

SocketChannel .isConnected() return false

私が理解していない問題は何ですか?

4

2 に答える 2

0

この問題は解決されました。私の wifi 接続には、プライベート リソースへのアクセス権がありませんでした。しかし、私はどのようにWebソケットに他の問題を抱えていますか。Android ソケットリードメソッドです return -1

于 2012-10-01T10:01:52.337 に答える
0

呼び出しの前であっても、DNS 解決がブロックされている可能性がありconnect()ます。別の行に入れnew InetSocketAddress(mWsHost, mWsPort)て、その結果を印刷します。あなたがそこで立ち往生している可能性があります。

そうでない場合は、telnet でターゲット ホスト/ポートに接続できるかどうかを確認します。

~$ telnet host port
于 2012-09-21T15:39:08.857 に答える