2012-07-27 52 views
1

尝试从服务器读取一些图像文件,并使用同样的套接字编程。当文件不可用时,InputStream在读取时抛出SocketTimeOutException

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

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

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

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

在上面的代码中,当我调用bufferedInputStream的read()时,我收到异常。我如何处理这个异常并丢失与服务器的连接。

谢谢

回答

1

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

如果发生SocketTimeoutException,则不会丢失连接。是什么让你觉得你做到了?

+0

这篇文章帮助我了解我在哪里以及为什么会遇到异常。谢谢。 – Upendra 2012-07-27 22:10:56

+0

正如你所说的,如果连接没有关闭或在异常之后处理,我们应该处理流的清理。如果我们不关闭流,那么会有一个绑定到套接字的流。如果我们关闭套接字,它会在内部关闭与该套接字关联的流。我的Java技能非常差。请纠正我错在哪里。 – Upendra 2012-07-27 22:41:14

+0

@Upendra你在说什么?我说'处理溪流清洁'没有任何内容。不要关闭任何东西,只要记下超时时间,或许可以算出来,然后重试。当你得到太多的超时,或者read()返回-1,或者你得到一个不同的IOException时,关闭套接字,或者更好的是输出流(如果有的话)。关闭套接字会关闭它的流,反之亦然。 – EJP 2012-07-27 22:48:14

相关问题