怎么修 java.net.SocketException: 破管?
我用 apache commons http client 对于挑战 url 使用方法 post 发布参数,很少给出以下错误。
有人可以告诉我什么导致这个例外以及如何调试它?
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/
有人可以告诉我什么导致这个例外以及如何调试它?
没有找到相关结果
已邀请:
10 个回复
郭文康
赞同来自:
通常,当另一端已经关闭时,记录连接;
较少通常对等节点关闭连接,而无需读取已在其结束时已等待的所有数据。
因此,在这两种情况下,您都有一个定义或实现的应用程序协议。
有一个第三种原因我不会在这里记录,但这包括点对点节点正在制作有意的重启动作,而不是正确的连接关闭。
奔跑吧少年
赞同来自:
尝试增加可用的内存量 JVM 和 / 或者在获得这些错误时控制使用内存。
知食
赞同来自:
这是在客户端 - 服务器应用程序中的一个非常常见的排除,该应用程序从客户端接收来自应用程序的客户或服务器的流量。 例如,客户端是浏览器。 如果浏览器拨打电话 Ajax, 和 / 或者用户只关闭页面或浏览器,它可以意外地有效地杀死整个连接。 原则上,您将在另一端完成应用程序的任何时间看到此错误,并且您没有期待它。
如果您在应用程序中遇到此异常,则意味着您必须检查其发生的代码 IO /Input/Output/ 并用块包裹它 try/catch, 抓住这一点 IOException. 然后,您必须决定如何应对这种半想象的情况。
在你的情况下,你仍然有控制的最早的地方是挑战
- 所以确保呼叫将转动块 try/catch, 并根据您认为您需要处理它。
我最终没有建议注册特定错误 SocketException-Broken Pipe 除了任何其他级别 debug/trace. 此外,它可以用作攻击形式。 DOS /不使用服务/ 通过填写日志。 尝试硬化并对此常用脚本进行对申请进行粘附。
莫问
赞同来自:
到:
后:
帅驴
赞同来自:
要消除此异常,您将始终必须断开与上一个会话的连接,并创建新的客户端实例和与服务器的新连接。 相同的方法可能是有用的 HTTPClient.
八刀丁二
赞同来自:
.
调查结束后,我找到了一个解决问题的解决方案。 我知道这个问题很老,但我更愿意分享我的决定,有人可以找到它很有用。
问题在于创造 ServerSocket. 我从文档中读取有一个限制 50 插座。 如果您尝试打开另一个化合物,他们将被拒绝。 解决方案仅在更改服务器端的默认配置时组成。 在下一个情况下,我创建一个侦听端口的套接字服务器 TCP
并占据最大的等待插座
.
的 Javadoc of
https://docs.oracle.com/javase ... .html
:
传入连接的最大队列长度 /请求连接/ 安装在参数中 backlog. 如果连接指示填充队列时,则化合物偏转。
君笑尘
赞同来自:
这只是一个合理的假设。 重新部署我的服务器应用程序的文件并重新测试问题后 "Broken pipe" 消失了。
石油百科
赞同来自:
: 另一端关闭了连接。 我想分享当我遇到他时发生的经验:
在客户请求标题中
错误地想知道了Query身体实际上是 /事实上,没有身体/
插座中的较低服务 tomcat 等待这个体型 /http 位于 TCP, 是通过封装和封装交付的 .../
什么时候 60 秒已过期 tomcat 抛出超时异常:
客户端收到代码代码的答案。 500 由于排除了等待时间。
客户端关闭连接 /因为他得到了答案/.
tomcat 抛出
, 因为客户关闭它。
有时 tomcat 不会丢掉破碎 pip 例外,因为例外 timeout 关闭连接为什么这样的差异也很困惑。
奔跑吧少年
赞同来自:
传入连接的最大队列长度 /a
请求连接/ 出发 50. 如果出现连接指示
填充队列时,连接偏转。
您必须增加参数 "backlog" 你的他 ServerSocket, 例如
董宝中
赞同来自: