【问题标题】:Socket timeout not working, InputStream read blocks套接字超时不起作用,InputStream 读取块
【发布时间】:2015-01-15 16:51:22
【问题描述】:

我在读取套接字输入流时遇到问题。 在阅读之前我为 HttpClient 设置了超时

connectionManager.getParams().setSoTimeout(1000*10);
connectionManager.getParams().setConnectionTimeout(1000*10);
HttpClient client = new HttpClient(connectionManager);

尝试读取响应流,而不是 SocketTimeoutException 我在 read() 方法上遇到阻塞。

    client.executeMethod(method);
    InputStream stream = method.getResponseBodyAsStream();

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        int read;
        byte[] bytes = new byte[1024];
        while ((read = stream.read(bytes)) != -1) {
            baos.write(bytes, 0, read);
        }
    } catch (Throwable e) {
        e.printStackTrace();
    } finally {
        try {
            baos.close();
            stream.close();
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

如何读取没有块的输入流以及为什么 soTimeout 不起作用?

非常感谢。

【问题讨论】:

    标签: java sockets block


    【解决方案1】:

    已解决。我添加了调用线程读取响应的停止方法的线程监视器。

    【讨论】:

      猜你喜欢
      • 2014-01-13
      • 2015-07-07
      • 2018-07-20
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多