最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決java.net.SocketTimeoutException: Read timed out的問題

 更新時(shí)間:2021年06月08日 09:00:14   作者:大造夢家  
這篇文章主要介紹了解決java.net.SocketTimeoutException: Read timed out的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java.net.SocketTimeoutException: Read timed out

產(chǎn)生問題的環(huán)境: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與項(xiàng)目部署在不同服務(wù)器,讀取大文件耗時(shí)較長,超過了tomcat限制的一條連接的生存時(shí)間,導(dǎo)致tomcat判定連接超時(shí)

解決方案:

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

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

增加 disableUploadTimeout="false",取消讀寫連接超時(shí)設(shè)置

或者

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

增加keepAliveTimeout="100000",增大連接生存時(shí)間

SocketException常見異常

第1個(gè)異常是java.net.BindException:Address already in use: JVM_Bind

該異常發(fā)生在服務(wù)器端進(jìn)行new ServerSocket(port)(port是一個(gè)0,65536的整型值)操作時(shí)。異常的原因是以為與port一樣的一個(gè)端口已經(jīng)被啟動,并進(jìn)行監(jiān)聽。此時(shí)用netstat –an命令,可以看到一個(gè)Listending狀態(tài)的端口。只需要找一個(gè)沒有被占用的端口就能解決這個(gè)問題。

第2個(gè)異常是java.net.ConnectException: Connection refused: connect

該異常發(fā)生在客戶端進(jìn)行new Socket(ip, port)操作時(shí),該異常發(fā)生的原因是或者具有ip地址的機(jī)器不能找到(也就是說從當(dāng)前機(jī)器不存在到指定ip路由),或者是該ip存在,但找不到指定的端口進(jìn)行監(jiān)聽。出現(xiàn)該問題,首先檢查客戶端的ip和port是否寫錯(cuò)了,如果正確則從客戶端ping一下服務(wù)器看是否能ping通,如果能ping通(服務(wù)服務(wù)器端把ping禁掉則需要另外的辦法),則看在服務(wù)器端的監(jiān)聽指定端口的程序是否啟動,這個(gè)肯定能解決這個(gè)問題。

ConnectException: Connection refused: 該異常在客戶端多線程訪問時(shí)也會出現(xiàn)。

第3個(gè)異常是java.net.SocketException: Socket is closed

該異常在客戶端和服務(wù)器均可能發(fā)生。異常的原因是己方主動關(guān)閉了連接后(調(diào)用了Socket的close方法)再對網(wǎng)絡(luò)連接進(jìn)行讀寫操作。

第4個(gè)異常是java.net.SocketException: (Connection reset或者Connect reset by peer:Socket write error)

該異常在客戶端和服務(wù)器端均有可能發(fā)生,引起該異常的原因有兩個(gè),第一個(gè)就是如果一端的Socket被關(guān)閉(或主動關(guān)閉或者因?yàn)楫惓M顺龆鸬年P(guān)閉),另一端仍發(fā)送數(shù)據(jù),發(fā)送的第一個(gè)數(shù)據(jù)包引發(fā)該異常(Connect reset by peer)。另一個(gè)是一端退出,但退出時(shí)并未關(guān)閉該連接,另一端如果在從連接中讀數(shù)據(jù)則拋出該異常(Connection reset)。簡單的說就是在連接斷開后的讀和寫操作引起的。

第5個(gè)異常是java.net.SocketException: Broken pipe

該異常在客戶端和服務(wù)器均有可能發(fā)生。在第4個(gè)異常的第一種情況中(也就是拋出SocketExcepton:Connect reset by peer:Socket write error后),如果再繼續(xù)寫數(shù)據(jù)則拋出該異常。前兩個(gè)異常的解決方法是首先確保程序退出前關(guān)閉所有的網(wǎng)絡(luò)連接,其次是要檢測對方的關(guān)閉連接操作,發(fā)現(xiàn)對方關(guān)閉連接后自己也要關(guān)閉該連接。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java編寫創(chuàng)建數(shù)據(jù)庫和表的程序

    java編寫創(chuàng)建數(shù)據(jù)庫和表的程序

    這篇文章主要為大家詳細(xì)介紹了java編寫創(chuàng)建數(shù)據(jù)庫和表的程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java中常見的日期操作(取值、轉(zhuǎn)換、加減、比較)

    Java中常見的日期操作(取值、轉(zhuǎn)換、加減、比較)

    本文給大家介紹java中常見的日期操作,日期取值、日期轉(zhuǎn)換、日期加減、日期比較,對java日期操作相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Spring?Bean的8種加載方式總結(jié)

    Spring?Bean的8種加載方式總結(jié)

    以前學(xué)習(xí)Spring框架的時(shí)候,總結(jié)了幾種Bean的加載方式,不過老師說還有其它的加載方式,以下八種并不是全部,但也足以用來做很多事情了,希望對大家有所幫助
    2022-10-10
  • Springboot通過ObjectMapper配置json序列化詳解

    Springboot通過ObjectMapper配置json序列化詳解

    SpringBoot默認(rèn)集成Jackson庫,其中ObjectMapper類是核心,用于Java對象與JSON字符串的互轉(zhuǎn),提供配置序列化特性、注冊模塊等方法,在SpringBoot中可以全局配置JSON格式,如日期格式化、將Long轉(zhuǎn)為字符串,還可以配置序列化時(shí)的各種規(guī)則,感興趣的可以了解一下
    2024-10-10
  • Spring自定義注解實(shí)現(xiàn)接口版本管理

    Spring自定義注解實(shí)現(xiàn)接口版本管理

    這篇文章主要介紹了Spring自定義注解實(shí)現(xiàn)接口版本管理,RequestMappingHandlerMapping類是與 @RequestMapping相關(guān)的,它定義映射的規(guī)則,即滿足怎樣的條件則映射到那個(gè)接口上,需要的朋友可以參考下
    2023-11-11
  • Spring Boot分段處理List集合多線程批量插入數(shù)據(jù)的解決方案

    Spring Boot分段處理List集合多線程批量插入數(shù)據(jù)的解決方案

    大數(shù)據(jù)量的List集合,需要把List集合中的數(shù)據(jù)批量插入數(shù)據(jù)庫中,本文給大家介紹Spring Boot分段處理List集合多線程批量插入數(shù)據(jù)的解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 淺談SpringBoot內(nèi)嵌Tomcat的實(shí)現(xiàn)原理解析

    淺談SpringBoot內(nèi)嵌Tomcat的實(shí)現(xiàn)原理解析

    這篇文章主要介紹了淺談SpringBoot內(nèi)嵌Tomcat的實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java動態(tài)方法調(diào)度實(shí)例分析

    java動態(tài)方法調(diào)度實(shí)例分析

    這篇文章主要介紹了java動態(tài)方法調(diào)度,結(jié)合實(shí)例形式對比分析了java的動態(tài)方法調(diào)度原理、使用方法與注意事項(xiàng),需要的朋友可以參考下
    2016-06-06
  • Java中深拷貝,淺拷貝與引用拷貝的區(qū)別詳解

    Java中深拷貝,淺拷貝與引用拷貝的區(qū)別詳解

    這篇文章主要為大家詳細(xì)介紹了Java面試中常遇見的問題:深拷貝、淺拷貝與引用拷貝的區(qū)別,文中通過示例進(jìn)行了詳細(xì)講解,需要的可以參考一下
    2022-08-08
  • Java?事務(wù)注解@Transactional回滾(try?catch、嵌套)問題

    Java?事務(wù)注解@Transactional回滾(try?catch、嵌套)問題

    這篇文章主要介紹了Java?@Transactional回滾(try?catch、嵌套)問題,Spring?事務(wù)注解?@Transactional?本來可以保證原子性,如果事務(wù)內(nèi)有報(bào)錯(cuò)的話,整個(gè)事務(wù)可以保證回滾,但是加上try?catch或者事務(wù)嵌套,可能會導(dǎo)致事務(wù)回滾失敗
    2022-08-08

最新評論

弋阳县| 江永县| 信阳市| 革吉县| 满洲里市| 海安县| 曲阜市| 丰顺县| 四会市| 安阳市| 阳高县| 陕西省| 巴塘县| 定安县| 漳浦县| 泽普县| 云梦县| 保定市| 阿坝县| 林西县| 蒙山县| 准格尔旗| 石嘴山市| 谷城县| 玛纳斯县| 思南县| 辽阳县| 沅江市| 吉木乃县| 海林市| 蕉岭县| 两当县| 嘉祥县| 得荣县| 渭源县| 灵石县| 漳浦县| 双峰县| 贞丰县| 温泉县| 精河县|