如何修复java.net.SocketException:管道损坏?

我正在使用apache commons http客户端使用post方法来调用url来发布参数,并且很少抛出以下错误。

java.net.SocketException: Broken pipe

at java.net.SocketOutputStream.socketWrite0(Native Method)

at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)

at java.net.SocketOutputStream.write(SocketOutputStream.java:136)

at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)

at java.io.FilterOutputStream.write(FilterOutputStream.java:80)

at org.apache.commons.httpclient.methods.ByteArrayRequestEntity.writeRequest(ByteArrayRequestEntity.java:90)

at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)

at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)

at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)

at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)

有人可以建议导致此异常的原因以及如何对其进行调试吗?

回答:

原因是:

  • 最通常的是,在另一端已经关闭连接时写入连接;
  • 通常,对等方关闭连接而不读取其末端已经挂起的所有数据。

    因此,在两种情况下,你的应用程序协议定义或实施都不充分。

还有第三个原因,我在这里不做记录,但是涉及到对等方采取故意的操作来重置而不是正确地关闭连接。

以上是 如何修复java.net.SocketException:管道损坏? 的全部内容, 来源链接: utcz.com/qa/418670.html

回到顶部