servlet socket通过阅读器读取超时

时间:2017-04-28 14:50:08

标签: java sockets servlets

我看到了这个例外:

java.net.SocketTimeoutException:尝试从套接字读取数据的超时

以下是生成它的代码:

    public static String extractBody(HttpServletRequest request) {
        StringBuffer sb = new StringBuffer();
        String line = null;
        try {
            //BufferedReader reader = request.getReader();
            BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
        } catch (Exception e) {
            logger.fatal("Failed to read from socket with content-length: {}", request.getHeader("Content-Length"));
            e.printStackTrace();
        }
        return sb.toString();
    }

当它发生时,写入的内容长度不为零。就像这样

Failed to read from socket with content-length: 279645

造成此超时的原因是什么?套接字是否被客户端未关闭?还有其他我想念的东西吗?我是否应该从servlet请求中读取正文数据?大多数请求工作正常,我有时只看到这个错误,但它可能是某个客户端版本或平台或其他东西。

1 个答案:

答案 0 :(得分:0)

内容长度标题与实际内容长度不匹配,正在等待更多数据。