[英]Socket OutputStream::write method mixes TCP packets?
我在使用Java套接字时遇到了一些问题。
我创建了一个简单的代理服务器,该服务器侦听http请求,将此请求传输到源,然后返回响应,而不会断开连接。 有时客户端会收到无效数据。 我查看了tcp转储日志,发现tcp数据包是混合的
这是非常简单的代码示例
Socket socket = new Socket("127.0.0.1", 3000);
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
while (true) {
final Request request = Request.read(in);
if (request == null) return;
try {
// send http request
HttpRequest httpRequest = HttpRequest.factory(request);
Response response = httpRequest.response();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
buffer.write(response.headers.toString());
buffer.write(response.body);
out.write(buffer.toByteArray());
out.flush();
} catch (ParserException | IOException e) {
e.printStackTrace();
return;
}
}
这是一个屏幕tcp转储日志,您可以在一个tcp数据包中看到3 http响应http://dl2.joxi.net/drive/0009/2601/629289/150827/004858080b.jpg
为什么会发生这种情况,以及如何解决这个问题?
更新28.10.2015 17:50
抱歉,这是我在服务器端的错。 Java完美运行
您所看到的是预期的正确行为。 Connection: keep-alive
标头表示连接保持打开状态,以便可以将其用于多个HTTP请求。 如果将其与流水线结合使用,则响应甚至可能位于单个TCP段中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.