Java套接字第二次写入尝试失败

时间:2011-04-15 06:43:48

标签: java sockets

我有一个功能:

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

工作正常。保持插座打开。 尝试再次调用此函数但得到错误:java.net.SocketException:Broken pipe

尽管

socket.isClosed - false
socket.isOutputShutdown - false
socket.isConnected - true

2 个答案:

答案 0 :(得分:3)

很可能另一端关闭了连接。第一次写入也可能失败,因为write()不保证传递。一旦知道另一端没有收听,你才会得到一个例外。

isClosed表示;我已关闭连接

isOutputShutdown表示;让我关闭输出

isConnected表示;有它连接

检测连接真正起来的唯一方法是从另一端获得响应,告诉您已收到数据。例如对心跳的反应。如果没有那个响应(必须是你的协议的一部分),你就无法确定另一端是否收到了它。

答案 1 :(得分:0)

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