2012-07-27 51 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

相關問題