2011-04-15 65 views
0

我有一個函數:的Java套接字寫入失敗

... 
socket.getOutputStream().write("something".getBytes()); 
socket.getOutputStream().flush(); 
... 

工作正常。保持插座打開。 試圖再次調用此函數,但得到的錯誤:java.net.SocketException異常:殘破的管道

儘管

socket.isClosed - 假
socket.isOutputShutdown - 假
socket.isConnected - true

+0

僅當寫入新數據時才檢測到超時連接...檢查isClosed()_before_ write _do_ _not_ work。 – 2011-04-15 06:46:04

+0

我無法通過本地Socket和ServerSocket測試重現此問題。您的具體情況有些問題,您能否提供更多信息? – 2011-04-15 06:54:05

回答

3

這很可能是另一端關閉了連接。第一次寫入也可能失敗,因爲write()不能保證交付。一旦知道另一端不在收聽,你只會得到一個異常。

isClosed手段;我已關閉連接

isOutputShutdown表示;有我關掉輸出

isConnected手段;它有沒有連接

檢測連接是否真正起作用的唯一方法是從另一端獲取響應,告訴您它已收到您的數據。例如對心跳的迴應。如果沒有這種迴應(它必須是你的協議的一部分),你不能確定另一端是否已收到它。

0

斷開的管道意味着您已將數據寫入到已由另一端關閉的連接。這可能表示應用程序協議錯誤。