他の Android デバイス (クライアント) が接続するサーバーを実行する Android デバイスがあります。ノンブロッキングモードでSocketChannel
andを使用しています。ServerSocketChannel
サーバー デバイスで ServerSocketChannel を初期化するためのコードは次のとおりです。ServerSocket serverSocket;
InetSocketAddress address = new InetSocketAddress(InetAddress.getLocalHost().getHostAddress(), 10000);
serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
serverSocket = serverSocketChannel.socket();
serverSocket.bind(address);
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
Log.i("AdminNetwork", serverSocket.getInetAddress().getHostAddress());
クライアント デバイスがサーバー デバイスに接続しようとすると、接続がタイムアウトし、null メッセージを含む ConnectException がスローされます。Log.i()
ServerSocket がバインドされている IP アドレスを確認するために呼び出しを行いました。コードを実行すると、IP アドレスが「127.0.0.1」であるという出力が表示されます。通常の Java アプリケーションでコードを試してみたところ、コンピューターの内部 IP アドレスが表示されました。サーバーをコンピューターで実行すると、クライアントは正常に接続します。
問題は、ServerSocket がループバック アドレスにバインドされ、クライアント接続が失敗することだと思います。これがクライアントのタイムアウトを引き起こす問題ですか? もしそうなら、どうすれば修正できますか?