2013-04-24 52 views
0

我有通过HTTP到服务的套接字连接。该服务仅支持在发送响应时默认关闭连接的HTTP/1.0。有一个参数添加到此版本的协议 - 连接:保持活着 - 使其成为可能。该标准定义服务应该将该参数附加到标题。这不会发生响应标题不包含它。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 2013-04-24 08:24:34

+0

你控制什么?客户端还是服务器或两者?如果你对服务器没有影响,并且它关闭了连接,那么你就无能为力,只需要创建新的套接字。 – JIV 2013-04-24 08:26:58

回答

1

HTTP 1.0标准(RFC 1945)实际上没有定义任何这样的东西。这是一项后添加功能,服务器不一定要支持它。

+0

@locke EJP写道,你必须处理不支持这个特性的服务器。但是除此之外,无论如何,在任何时候你都应该已经发现了socket关闭的可能性。你同意吗,EJP? – Fildor 2013-04-24 09:12:13

+0

@Fildor当然。服务器可以随时关闭连接,即使在HTTP 1.1中也是如此。如果它拒绝与'Connection:Keep-alive'合作,同上。 – EJP 2013-04-24 10:17:01