Невозможно закрыть потоковую передачу http при неправильном ответе

Мой HTTP-клиент apache считывает данные с сервера, который отправляет нам потоковую передачу HTTP (в виде фрагментированных данных).

У меня есть входной поток и Buffered Reader для получения данных и чтения этих данных с использованием метода Buffered Data readLine.

InputStream inputStream = httpEntity.getContent();
br= new BufferedReader(new InputStreamReader(inputStream));

while ((line = br.readLine()) != null) 

Я хочу закрыть соединение, если получу неправильный ответ от сервера.

Для этого я создаю timertask с временным интервалом, чтобы закрыть мое соединение. Я анализирую ответ каждый раз, когда я его получаю, чтобы проверить правильность ответа, если ответ правильный, то я сбрасываю задание времени. Если я нахожу неправильный ответ в этом случае, я не сбрасываю таймер (и позволяю таймеру выполняться до времени, на которое он был ранее установлен)

Я хочу знать, может ли помочь использование небуферизованного ввода-вывода? или мне нужен какой-то другой подход?

Проблема, которую я вижу, заключается в том, что, поскольку соединение открыто, моя задача таймера не может закрыть соединение. inputStream.close или bufferReader.close оба не могут выполняться (кажется, бесконечно ждут)


person HemantT    schedule 02.11.2010    source источник


Ответы (1)


BufferReader.close() закроет только inputStream, который, в свою очередь, вызовет inputStream.close(). Согласно java API InputStream.close() ничего не делает. Вам нужно закрыть сокет или что-то еще, что вы абстрагируете с помощью httpEntity.

person Niel de Wet    schedule 03.11.2010
comment
Привет, спасибо за ответ. Я абстрагирую сам сокет. Есть ли способ получить доступ к сокету (закрытие сокета). из HTTClient или HttpEntity? - person HemantT; 03.11.2010
comment
Можете ли вы добавить метод close в HTTPClient или HttpEntity, который вызывает метод close своего атрибута сокета? - person Niel de Wet; 03.11.2010