У меня есть соединение сокетов TCP, которое хорошо работает на Android 2.3, но теперь сталкивается с некоторыми проблемами на 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");
}
Этот код работает в фоновом потоке. И он работал над Gingerbread.
Пытался использовать InputStreamReader и OutputStreamWriter вместо прямых потоков - никакого эффекта.