Java 重用套接字

标签 java sockets http stream

我通过 HTTP 与服务建立了套接字连接。该服务仅支持 HTTP/1.0,默认情况下,发送响应时会关闭连接。此版本的协议(protocol)中添加了一个参数 - Connection: Keep-alive - 使其成为可能。该标准定义服务也应该将此参数附加到 header 中。这不会发生,响应 header 不包含它。

当我从套接字获取输入流时,它不支持标记。那么,我可以放心地假设我将无法重用同一连接来发送/接收多个请求/响应吗?

更新 我无法控制该服务,我手动构建请求。

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 1.0 标准 ( RFC 1945 ) 实际上并没有定义任何这样的东西。这是一个后期添加的功能,服务器没有义务支持它。

关于Java 重用套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16186952/

相关文章:

java - 为什么我的输出字符串是 null 而不是我想要的?

c++ - 非本地 IP 的套接字监听器不起作用

Java套接字发送数据

c++ - curl 没有正确超时

java - 使用分隔符分割内容

java - 寻找一种简洁的方法通过 Controller 的 Model 对象向 Spring MVC 中的每个页面添加标题信息

c - C中通过http发送图像

c# - 查询字符串到处理程序页面

c# - 从一个链接下载多个文件

java - Spring MVC - 什么负责将 Controller 响应路由到模板?