Android 2.3 では正常に動作する TCP ソケット接続がありますが、Android 4.1 ではいくつかの問題に直面しています。問題は、接続が閉じられているように、InputStream.read() メソッドが常に (ブロックせずに) -1 を返すことです。
ソケットの作成:
SocketFactory socketFactory = SocketFactory.getDefault();
Socket socket = socketFactory.createSocket("c.whatsapp.net", 5222);
socket.setSoTimeout(3*60*1000);
socket.setTcpNoDelay(true);
入力ストリームと出力ストリームを取得し、いくつかの初期データを書き込みます。
InputStream inputStream = new BufferedInputStream(socket.getInputStream());
OutputStream outputStream = new BufferedOutputStream(socket.getOutputStream());
outputStream.write(87);
outputStream.write(65);
outputStream.write(1);
outputStream.write(2);
outputStream.flush();
次に、この条件は常にブロックせずに通過します。
int c = inputStream.read();
if (c < 0) {
Log.d(TAG, "End of stream");
}
このコードはバックグラウンド スレッドで実行されています。そして、ジンジャーブレッドに取り組んでいました。
直接ストリームの代わりに InputStreamReader と OutputStreamWriter を使用しようとしましたが、効果はありません。