纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

java.net.SocketTimeoutException:Read timed out 解决java.net.SocketTimeoutException: Read timed out的问题

大造梦家   2021-06-08 我要评论
想了解解决java.net.SocketTimeoutException: Read timed out的问题的相关内容吗大造梦家在本文为您仔细讲解java.net.SocketTimeoutException:Read timed out的相关知识和一些Code实例欢迎阅读和指正我们先划重点:java.net.SocketTimeoutException,,Read,timed,out下面大家一起来学习吧

java.net.SocketTimeoutException: Read timed out

产生问题的环境:ssm+mysql+gridFS+tomcat

问题代码段:

public void write(OutputStream os, InputStream is) {
  try (BufferedOutputStream bos = new BufferedOutputStream(os); BufferedInputStream bis = new BufferedInputStream(is)) {
   int count;
   byte[] buffer = new byte[1024];
   while ((count = bis.read(buffer)) > 0) {
    bos.write(buffer, 0, count);
   }
   os.flush();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

其中输出流是使用的response.getOutPutStream();

问题原因:

由于mongodb与项目部署在不同服务器读取大文件耗时较长超过了tomcat限制的一条连接的生存时间导致tomcat判定连接超时

解决方案:

在tomcat中修改server.xml配置如下:

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" disableUploadTimeout="false"
               redirectPort="8443" />

增加 disableUploadTimeout="false"取消读写连接超时设置

或者

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
    keepAliveTimeout="100000"
               redirectPort="8443" />

增加keepAliveTimeout="100000"增大连接生存时间

SocketException常见异常

第1个异常是java.net.BindException:Address already in use: JVM_Bind

该异常发生在服务器端进行new ServerSocket(port)(port是一个065536的整型值)操作时异常的原因是以为与port一样的一个端口已经被启动并进行监听此时用netstat –an命令可以看到一个Listending状态的端口只需要找一个没有被占用的端口就能解决这个问题

第2个异常是java.net.ConnectException: Connection refused: connect

该异常发生在客户端进行new Socket(ip, port)操作时该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由)或者是该ip存在但找不到指定的端口进行监听出现该问题首先检查客户端的ip和port是否写错了如果正确则从客户端ping一下服务器看是否能ping通如果能ping通(服务服务器端把ping禁掉则需要另外的办法)则看在服务器端的监听指定端口的程序是否启动这个肯定能解决这个问题

ConnectException: Connection refused: 该异常在客户端多线程访问时也会出现

第3个异常是java.net.SocketException: Socket is closed

该异常在客户端和服务器均可能发生异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作

第4个异常是java.net.SocketException: (Connection reset或者Connect reset by peer:Socket write error)

该异常在客户端和服务器端均有可能发生引起该异常的原因有两个第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭)另一端仍发送数据发送的第一个数据包引发该异常(Connect reset by peer)另一个是一端退出但退出时并未关闭该连接另一端如果在从连接中读数据则抛出该异常(Connection reset)简单的说就是在连接断开后的读和写操作引起的

第5个异常是java.net.SocketException: Broken pipe

该异常在客户端和服务器均有可能发生在第4个异常的第一种情况中(也就是抛出SocketExcepton:Connect reset by peer:Socket write error后)如果再继续写数据则抛出该异常前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接其次是要检测对方的关闭连接操作发现对方关闭连接后自己也要关闭该连接

以上为个人经验希望能给大家一个参考也希望大家多多支持


相关文章

猜您喜欢

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式