gpt4 book ai didi

java - Socket OutputStream::write 方法混合了 TCP 数据包?

转载 作者:可可西里 更新时间:2023-11-01 02:51:33 25 4
gpt4 key购买 nike

我有一些关于 java socket 的问题。

我创建了一个简单的代理服务器来监听 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 header 表示连接保持打开状态,以便它可以用于多个 HTTP 请求。如果它与流水线相结合,响应甚至可能出现在单个 TCP 段中。

关于java - Socket OutputStream::write 方法混合了 TCP 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com