Написав какой-то похожий код для изучения того, как обрабатывать HTTP-запросы в Java, я не верю, что поведение BufferedReader совместимо с чтением из Socket, используемого для передачи HTTP-запросов, потому что, как уже упоминалось, readLine () блокирует, если больше нет данных для чтения, поэтому ваше приложение зависает. В соответствии со спецификацией HTTP клиент сохраняет Socket открытым после того, как он написал свой запрос, поэтому readLine () просто ждет, пока не станет доступно больше данных. Попытка обнаружить завершающий \ n \ r в последней строке HTTP-запроса также не работает в строке, возвращаемой readLine (), поскольку она удаляет любую комбинацию символов конца строки: \ n, \ r или \ r \ п.
Пустая строка также включена между заголовками и телом запроса, поэтому, если вы ищете пустую строку в качестве завершения сообщения, вам нужно проверить, что это не строка между заголовками и телом.
Я думаю, что для этого нужно читать посимвольное чтение из InputStream с read (byte []) - оно будет считываться до размера вашего байта [] и прекращает чтение, если встречается конец потока.