2013-04-24 3 views
0

У меня есть подключение сокетов по 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()); 
+0

Можете ли вы показать нам какой-нибудь код? Используете ли вы какую-либо библиотеку для создания своих HTTP-запросов? – Fildor

+0

что вы контролируете? клиента или сервера или обоих? Если у вас нет влияния на сервер, и он закрывает соединение, вы ничего не можете сделать, просто создайте новый сокет. – JIV

ответ

1

HTTP-1,0 стандарт (RFC 1945) не определяет ничего подобного на самом деле. Это добавленная функция, и серверы не обязаны ее поддерживать.

+0

@locke Как пишет EJP, вам приходится иметь дело с серверами, не поддерживающими эту функцию. Но вне этого, вы должны были понять, что сокет закрыт в любой момент времени. Согласитесь, EJP? – Fildor

+0

@ Fildor Конечно. Сервер может закрыть соединение в любое время, даже в HTTP 1.1. И если он откажется сотрудничать с «Connection: Keep-alive», то же самое. – EJP

Смежные вопросы