我有一个功能:
...
socket.getOutputStream().write("something".getBytes());
socket.getOutputStream().flush();
...
工作正常。保持插座打开。 尝试再次调用此函数但得到错误:java.net.SocketException:Broken pipe
尽管
socket.isClosed - false
socket.isOutputShutdown - false
socket.isConnected - true
答案 0 :(得分:3)
很可能另一端关闭了连接。第一次写入也可能失败,因为write()不保证传递。一旦知道另一端没有收听,你才会得到一个例外。
isClosed
表示;我已关闭连接
isOutputShutdown
表示;让我关闭输出
isConnected
表示;有它连接
检测连接真正起来的唯一方法是从另一端获得响应,告诉您已收到数据。例如对心跳的反应。如果没有那个响应(必须是你的协议的一部分),你就无法确定另一端是否收到了它。
答案 1 :(得分:0)
断开管道意味着您将数据写入已被另一端关闭的连接。这可能表示应用程序协议错误。