现在的位置: 首页 > 综合 > 正文

java.net.SocketException: Connection reset by peer: socket write error

2016年11月26日 ⁄ 综合 ⁄ 共 2555字 ⁄ 字号 评论关闭
ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:
358 )
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:
434 )
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:
293 )
at org.apache.catalina.connector.OutputBuffer.writeByte(OutputBuffer.java:
399 )
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:
77 )
at com.vm.video.dao.VideoDao.downLoadVideo(VideoDao.java:
806 )
…… Caused by: java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:
737 )
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:
434 ) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java: 349 )
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:
761 )
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:
126 )
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:
570 )
at org.apache.coyote.Response.doWrite(Response.java:
560 ) at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java: 353 )
...
27 more
解决方案一 ClientAbortException: java.net.SocketException: Connection reset by
peer: socket write
error的原因是由于处理http连接时,正在输出内容时,用户关闭了IE,会出现一个"ClientAbortException",属于I/O处理
中出现的一个异常,应用服务器应该会捕捉。
Connection reset by peer的原因: 经常出现的Connection reset by peer: 原因可能是多方面的,不过更常见的原因是:
①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉; ②:客户关掉了浏览器,而服务器还在给客户端发送数据; ③:浏览器端按了Stop 很多人都说是客户端造成的,没有办法控制,是个比较郁闷的问题。
解决方案二 以前也曾经遇到过ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error的问题,但是造成这个错误的各种原因不一样。
第一步,为了找出出错的原因,我在几台机器上测试,结果,终于在有一台机器上运行会出现那样的问题。
第二步,为了找出真正出错的代码,我将所有在jsp页面用到的处理数据代码删掉,结果运行正常,不再报那个错,这个说明问题应该在jsp页面。 第三步,由于我在jsp页面中直接用一个类通过spring和hibernate查询得到结果,没有用到struts.因此,我修改代码,将所有查 询放到一个action里面,然后再用request.setAttribute()保存查询结果。再jsp页面直接用 request.getAttribute取得结果。这样,再次运行,第一次页面显示正常,并且后台也不报错。于是我认为,问题已经解决。 但是,运行几次以后,打开几个新的同一个页面后,后台又开始报同样的错误了,晕~~~~ 第四步, 为了确定问题的根源在哪里,我修改了VO,添加了implements Serializable,实现了Serializable接口。结果运行,这次是第一次运行后台就报 第五步,我打开所有调试信息,结果发现每次action执行结束后,我都会用decorator,就 是用装时器装饰一下页面,于是开始想,会不会是action执行结束后,再运行 "装饰器" 的那个过滤程序,结果造成session过期,从而导致那个问题。于是尝试不用装饰器去装饰那个页面。第一次运行正常。为了测试是否问题真正解决,我新开 了10个ie窗口,在各个页面轮流刷新页面,在刷新了 100 多下后,发现后台还没有报错,初步确定问题已经解决!

但是,造成这个问题的内在原因还是不清楚!






抱歉!评论已关闭.