繁体   English   中英

套接字OutputStream :: write方法混合TCP数据包?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM