【问题标题】:InputStream throwing SocketTimeOutException on read when file is not available当文件不可用时,InputStream 在读取时抛出 SocketTimeOutException
【发布时间】:2012-07-27 20:21:13
【问题描述】:

尝试从服务器读取一些图像文件并使用套接字编程。

但是当没有文件存在时,我得到了 socketTimeOut 异常。不仅失去与服务器的连接。

当没有文件存在时,如何避免丢失与服务器的连接。

InputStream inputStream = new BufferedInputStream(socket().getInputStream());

int i = -1;
while ((i = bufferedInputStream.read()) != -1) {
byteArrayOutputStream.write(i);
}

在上面的代码中,当我在 bufferedInputStream 上调用 read() 时出现异常。如何处理此异常并失去与服务器的连接。

谢谢

【问题讨论】:

    标签: java sockets socket.io socketexception


    【解决方案1】:

    “当文件 [不] 存在时”,您不会得到该异常。当您设置读取超时并且在超时内没有数据到达时,您会得到它,如果您的超时太短,请提高它。如果您想永远等待,请将其删除。这是你的超时,你设置它。

    如果您收到 SocketTimeoutException,您不会丢失连接。是什么让你认为你做到了?

    【讨论】:

    • 这篇文章帮助我了解了我在哪里以及为什么会出现异常。谢谢。
    • 正如你所说,如果连接没有在异常发生后关闭或释放,我们应该处理流的清理。如果我们不关闭流,那么就会有一个绑定到套接字的流。如果我们关闭套接字,它会在内部关闭与该套接字关联的流。我的java技能非常非常差。请纠正我的错误。
    • @Upendra 你在说什么?我对“处理流的清理”什么也没说。不要关闭任何东西,只要记下超时时间,也许算一算,然后再试一次。当你得到太多超时,或者 read() 返回 -1,或者你得到一个不同的 IOException 时,关闭套接字,或者如果你已经包裹了输出流,最好还是输出流。关闭套接字会关闭其流,反之亦然。
    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 2011-09-28
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多