java.net.SocketException: socket closed

在使用socket編程的時候,發現當使用完getInputStream方法後,再獲取OutputStream就會報java

java.net.SocketException: socket closed錯誤編程

看到JAVA api中寫到api

java.net.Socket.getInputStream方法:網絡

 

getInputStreamsocket

 

public InputStream getInputStream()throws IOExceptionspa

 

返回此套接字的輸入流。.net

若是此套接字具備關聯的通道,則所得的輸入流會將其全部操做委託給通道。若是通道爲非阻塞模式,則輸入流的 read 操做將拋出IllegalBlockingModeException。對象

在非正常條件下,底層鏈接可能被遠程主機或網絡軟件中斷(例如,TCP 鏈接狀況下的鏈接重置)。當網絡軟件檢測到中斷的鏈接時,將對返回的輸入流應用如下操做:blog

網絡軟件可能丟棄通過套接字緩衝的字節。網絡軟件沒有丟棄的字節能夠使用 read 讀取。get

若是沒有任何字節在套接字上緩衝,或者 read 已經消耗了全部緩衝的字節,則對 read 的全部後續調用都將拋出 IOException。

若是沒有任何字節在套接字上緩衝,而且沒有使用 close 關閉套接字,則 available 將返回 0。

關閉返回的 InputStream 將關閉關聯套接字。

返回:

今後套接字讀取字節的輸入流。

拋出:

IOException - 若是在建立輸入流時發生 I/O 錯誤、沒有關閉套接字、沒有鏈接套接字或者使用 shutdownInput() 關閉了套接字輸入

 

 

可是!!!!!

我發現Inputstream沒有被關閉。

最後發現是Inputstream的包裝對象進行了關閉,因此結論是,在你還要進行數據傳輸時,不要嘗試任何流的關閉。

 

更多文章:http://blog.gavinzh.com

相關文章
相關標籤/搜索