У меня есть подключение сокетов по HTTP к сервису. Служба поддерживает только HTTP/1.0, которая по умолчанию закрывает соединение при отправке ответа. В эту версию протокола добавлен параметр - Connection: Keep-alive - чтобы это стало возможным. Стандарт определяет, что служба должна также добавить этот параметр в заголовок. Этого не происходит, заголовок ответа не содержит его.Соединитель для повторного использования Java
Когда я получаю inputStream из сокета, он не поддерживает отметку. Итак, могу ли я с уверенностью предположить, что я не смогу повторно использовать одно и то же соединение для отправки/получения нескольких запросов/репонов?
Обновление У меня нет контроля над службой, и я создаю запрос вручную.
Socket socket = new Socket("server.com", 11111);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
writer.write("POST HTTP/1.0\r\n");
writer.write("Host: " + socket.getInetAddress().getHostName() + "\r\n");
writer.write("Content-Length: " + length + "\r\n");
writer.write("Content-Type: text/xml; charset=\"utf-8\"\r\n");
writer.write("Connection: Keep-alive\r\n");
writer.write("\r\n");
writer.write(xmldata);
writer.flush();
List<String> lines = IOUtils.readLines(socket.getInputStream());
Можете ли вы показать нам какой-нибудь код? Используете ли вы какую-либо библиотеку для создания своих HTTP-запросов? – Fildor
что вы контролируете? клиента или сервера или обоих? Если у вас нет влияния на сервер, и он закрывает соединение, вы ничего не можете сделать, просто создайте новый сокет. – JIV