2011-04-15 64 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

断开的管道意味着您已将数据写入到已由另一端关闭的连接。这可能表示应用程序协议错误。