在使用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的包裝對象進行了關閉,因此結論是,在你還要進行數據傳輸時,不要嘗試任何流的關閉。