我对java socket有一些问题。
我创建了一个简单的代理服务器,它监听http请求,将此请求传递给源,然后返回响应,而不断开连接。有时客户端会收到无效数据。我看了tcp dump logs,我发现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工作得很好
答案 0 :(得分:1)
您所看到的是预期的正确行为。 UITableView
标头表示连接保持打开状态,以便可以将其用于多个HTTP请求。如果它与流水线相结合,响应甚至可能出现在单个TCP段中。