最新国产好看的视频,伊人天堂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)被啟動(dò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)聽指定端口的程序是否啟動(dòng),這個(gè)肯定能解決這個(gè)問題。

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

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

該異常在客戶端和服務(wù)器均可能發(fā)生。異常的原因是己方主動(dòng)關(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)閉(或主動(dòng)關(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)知識(shí)感興趣的朋友一起學(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動(dòng)態(tài)方法調(diào)度實(shí)例分析

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

    這篇文章主要介紹了java動(dòng)態(tài)方法調(diào)度,結(jié)合實(shí)例形式對比分析了java的動(dòng)態(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ù)嵌套,可能會(huì)導(dǎo)致事務(wù)回滾失敗
    2022-08-08

最新評論

新蔡县| 密山市| 宜昌市| 厦门市| 教育| 上高县| 秭归县| 金沙县| 双峰县| 施甸县| 怀柔区| 蓬安县| 阆中市| 新安县| 丽江市| 雷州市| 中宁县| 吴桥县| 盘锦市| 潍坊市| 景洪市| 彭山县| 庐江县| 崇文区| 连州市| 金门县| 台山市| 陈巴尔虎旗| 隆子县| 荃湾区| 兴海县| 陇南市| 府谷县| 广德县| 普定县| 泰安市| 新建县| 延长县| 怀宁县| 靖宇县| 武清区|