認証サーバーに接続して、別のサーバー プログラムを実行している別の Android デバイスの IP アドレスとポートを取得する Android アプリを作成しています。認証サーバーは、リクエストの送信時に正しい接続情報を送信します。問題は、クライアント デバイスが Android サーバーに接続しようとするときです。クライアントは正しい情報を取得し、以前の接続を正常に閉じますが、新しい接続を作成しようとするとハングします。例外はスローされませんが、UI が応答せず、デバイスは最終的にアプリが応答していないと言います。クライアントデバイスとして機能するエミュレータと、サーバーとして機能する実際の電話があります。
以下は、スタックするクライアント コードの一部です。
Log.i("Socket", "About to open a new socket");
socketChannel = SocketChannel.open(new InetSocketAddress(ip, port));
socketChannel.configureBlocking(false);
socketChannel.register(selector, SelectionKey.OP_READ);
Log.i("Socket", "New socket created and registered");
ip はString
、サーバーの IP アドレスを含む です。port は、サーバーのポート番号です。Log.i()
プログラムがハングする場所を見つけるための 2 つの呼び出しがあります。最初の呼び出しは実行されますが、2 番目の呼び出しは実行されません。このコード セグメントが原因でアプリがフリーズする理由はありますか?
必要に応じてコードをさらに投稿できますが、問題は上記のセグメントにあると確信しています。