`

ClientAbortException: java.net.SocketException

阅读更多

ClientAbortException: java.net.SocketException

<!--问题内容-->

一大早打开远程连接就看到了这个错误,以为我的程序出了问题,GOOGLE一番发现这是TOMCAT6的问题,客户端在请求tomcat时,浏览器中途强行STOP就会出现!不知道有什么好的解决办法?
在网上查找了了下原因,大概归结为:
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

基本上没有解决办法,只有去修改TOMCAT的源代码!
==================
昨天同事要我帮助另一个女同事完成上传用户头像和下载用户头像的后台功能,今早测的时候发现:
通过IE,在地址栏输入下载图片的url没有报错,而通过同事做的桌面客户端(VC++)发来的请求却报
2009-10-23 10:52:11 org.apache.catalina.core.ApplicationContext log
信息: ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
 这是什么原因?
网上google了一下,看到该帖子:http://www.programfan.com/club/showpost.asp?id=27999
其中:
我把你的代码拷过来,又写了一个客户端,试了一下,没问题,能用,只是:
byte[] zijie=new byte[1024];          
while(input.read(zijie)>0)
{
    output.write(zijie);
    output.flush();
}
要注意最后一次读到的有可能是不满的,所以不能把整个zijie写出去,要用
output.write(zijie,0,len);
在循环外定义:
int len=0;
while((len=input.read(zijie))>0){
    ...
}
也就是读到多少写多少,否则最后一次是会把上一次的残留也写出去的。
另外就是虽然没问题能运行,但还是要把关流的代码写在finally里比较安全。
原来的代码是:后台直接根据文件路径获取到流返回:
  FileInputStream resultInputStream = new FileInputStream(file) ; //取出目标文件
后来改为:
  FileInputStream is= new FileInputStream(file) ; //取出目标文件
  HttpServletResponse response= ServletActionContext.getResponse();
  FileOutputStream  fos = null;
  try {
   String descFileName =  ServletActionContext
   .getServletContext().getRealPath("/") + "/uploadfiles/" + fileName;
   fos = new FileOutputStream(descFileName);
   byte[] bs=new byte[1024];
   int len=0;
   while((len=is.read(bs))>0){
    fos.write(bs,0,len);
    fos.flush();
   }
   resultInputStream = new FileInputStream(descFileName);
   response.reset();
   File fileSize = new File(descFileName);
   response.setHeader("Content-Length", Long.toString(fileSize.length()));
  } catch (Exception e) {
      return null;
  }   
  return resultInputStream;
也有的人说是没有reset()的原因,但是我不在项目的目录下临时存一个文件作为中介,依然会报该错误,只好这样如此处理。但是不知为何在中间加了一层就不报错了呢?
貌似我对打开流没做关闭处理哦,唉!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/foamflower/archive/2009/10/23/4721201.aspx
分享到:
评论

相关推荐

    org.apache.catalina.connector.ClientAbortException和TOMCAT的日志配置

    问题1:TOMCAT下载文件出错:org.apache.catalina.connector.ClientAbortException. 问题2:TOMCAT记录接收数据大小、发送数据大小和请求处理时间

    POI的学习笔记

    Apache POI是一个开源的Java API,用于处理Microsoft Office格式的文件,包括Excel (.xls, .xlsx), PowerPoint (.ppt, .pptx) 和 Word (.doc, .docx)。POI提供了一套工具集,允许开发者在不依赖Office软件的情况下,...

    java-poi-excel-导出20万条记录

    java-poi-excel-导出20万条记录

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662) 网络解决办法: (虽然该办法可行,但是本人并不提倡。具体原因在之后解释。...

    笔记笔记笔记

    - 使用`java.net.URLDecoder.decode()`对编码后的字符串进行解码,例如`URLDecoder.decode("%E4%BD%A0%E5%A5%BD", "UTF-8")`。 ### 5. RESTful API与注解 - **RESTful API**:一种设计网络应用程序的架构风格,其...

    springmvc提供视频播放功能时,手机端无法正常播放的解决办法

    3. **错误信息**:后台抛出`ClientAbortException`异常,提示为`IOException:null`。 4. **特殊行为**:手机默认浏览器在请求视频时,会同时向后台发送两个请求。 针对这些问题,我们首先排除了一些常见的原因,...

    struts下载

    - **ClientAbortException**:当客户端中断连接时可能会抛出`ClientAbortException`。这通常是由于网络问题或客户端操作导致的。 #### 4. 其他注意事项 - 在实际开发中,建议使用Apache Commons IO库中的`IOUtils....

    struts2-sunspoter-stream-1.0.jar

    在我们做struts2文件下载的时候,经常会遇到这种问题:点“打开/保存”一切正常,但当我们点击“取消”时,却报一堆的异常(其中包括ClientAbortException异常),附件中使用struts2-sunspoter-stream-1.0.jar插件可...

    Struts2下载文件点击取消出现的异常解决办法(含demo)

    在我们做struts2文件下载的时候,经常会遇到这种问题:点“打开/保存”一切正常,但当我们点击“取消”时,却报一堆的异常(其中包括ClientAbortException异常),非常让人头疼,如何彻底解决呢?附件中使用struts2-...

Global site tag (gtag.js) - Google Analytics