的Java套接字写入失败
问题描述:
我有一个函数:的Java套接字写入失败
...
socket.getOutputStream().write("something".getBytes());
socket.getOutputStream().flush();
...
工作正常。保持插座打开。 试图再次调用此函数,但得到的错误:java.net.SocketException异常:残破的管道
尽管
socket.isClosed - 假
socket.isOutputShutdown - 假
socket.isConnected - true
答
这很可能是另一端关闭了连接。第一次写入也可能失败,因为write()不能保证交付。一旦知道另一端不在收听,你只会得到一个异常。
isClosed
手段;我已关闭连接
isOutputShutdown
表示;有我关掉输出
isConnected
手段;它有没有连接
检测连接是否真正起作用的唯一方法是从另一端获取响应,告诉您它已收到您的数据。例如对心跳的回应。如果没有这种回应(它必须是你的协议的一部分),你不能确定另一端是否已收到它。
答
断开的管道意味着您已将数据写入到已由另一端关闭的连接。这可能表示应用程序协议错误。
仅当写入新数据时才检测到超时连接...检查isClosed()_before_ write _do_ _not_ work。 – 2011-04-15 06:46:04
我无法通过本地Socket和ServerSocket测试重现此问题。您的具体情况有些问题,您能否提供更多信息? – 2011-04-15 06:54:05