Способ возобновления соединения в java.net. HURTURLConnection - PullRequest
0 голосов
/ 21 февраля 2012

Сначала я открываю соединение и отправляю некоторые данные на сервер. Далее я получаю ответ.

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();

wr = new OutputStreamWriter(connection.getOutputStream());
wr.write("some text sent to server");
wr.flush();

//read the server answer
rd  = new BufferedReader(new InputStreamReader(connection.getInputStream()));
...

Мне нужно снова повторить весь цикл - отправить данные и получить ответ. Проблема в том, что если я использую тот же объект wr , я получаю IOException: поток закрыт . И если я попытаюсь сделать новый объект:

wr = new OutputStreamWriter(connection.getOutputStream());

Я получаю ProtocolException: OutputStream недоступен, поскольку заголовки запроса уже отправлены! . Неважно, если я отсоединяюсь и создаю новое соединение - это все то же самое.

Есть ли способ восстановить соединение?

И я делаю это на Android, но я не совсем уверен, имеет ли это какое-то значение в этой ситуации.

1 Ответ

1 голос
/ 21 февраля 2012

Вам нужно снова позвонить url.openConnection() и получить новое соединение. HttpURLConnection должен быть достаточно умен, чтобы повторно использовать существующее соединение, если запрос к тому же хосту Цитата из документов:

Each HttpURLConnection instance is used to make a single request but the underlying network connection to the HTTP server may be transparently shared by other instances.
...