Метод available () для InputStream из Socket сообщит вам о наличии данных в сокете, прежде чем вызывать блокирующий метод read ().
InputStream sockIS = sock.getInputStream();
int ba; // Number of bytes available to read from socket
for (;;) {
while ((ba = sockIS.available()) > 0) {
read message from socket;
process it;
}
do something else;
}
Не вызывайте блокирующее чтение, если нет данных для чтения. Не блокируйте чтение большего количества данных, чем доступно на данный момент.
Связанный метод, представляющий интерес (но не для вашей конкретной потребности): sock.setSoTimeout (millis), этот вызов позволяет вам вызывать sock.read (...) и заставлять его ждать не более определенного времени до того, как он генерирует исключение (которое вы бы обработали) или которое возвращает данные. Это полезно, если вы хотите получить быстрый ответ, но хотите решить проблемы, когда сервер больше не отвечает.
Другая проблема состоит в том, что вы помещаете фигурные скобки в неправильную строку, когда все знают, что они принадлежат в конце оператора if / while / for: -)