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

java中Socket設(shè)置超時時間的兩種方式

 更新時間:2022年11月09日 14:41:26   作者:荒野大碼農(nóng)  
這篇文章主要介紹了java中Socket設(shè)置超時時間的兩種方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Socket設(shè)置超時時間的兩種方式

方法1

調(diào)用Socket的connct 方法打開連接,并設(shè)置連接超時時間

Socket socket = new Socket()
socket.connect(new InetSocketAddress(ip, port), 3000); //設(shè)置超時3000毫秒

以上代碼是設(shè)置Socket的連接超時時間,當(dāng)連接超時時,會拋出如下異常:

在不設(shè)置連接超時時間的情況下,socket默認(rèn)的超時時間應(yīng)該是20毫秒左右(我試了5次大概都是20毫秒就會拋出異常)

方法2

調(diào)用Socket的setSoTimeout 方法設(shè)置io讀取/寫出超時時間

socket.setSoTimeout(5000);  //設(shè)置超時時間5000毫秒
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();

當(dāng)socket創(chuàng)建的IO流讀取或?qū)懗龀^了設(shè)定時間時,就會拋出異常

java.net.SocketTimeoutException: Read timed out
  at java.net.SocketInputStream.socketRead0(Native Method)
  at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
  at java.net.SocketInputStream.read(SocketInputStream.java:171)
  at java.net.SocketInputStream.read(SocketInputStream.java:141)
  at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
  at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
  at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
  at java.io.InputStreamReader.read(InputStreamReader.java:184)
  at java.io.BufferedReader.fill(BufferedReader.java:161)
  at java.io.BufferedReader.readLine(BufferedReader.java:324)
  at java.io.BufferedReader.readLine(BufferedReader.java:389)

如果不設(shè)置setSoTimeout的話,默認(rèn)的io流讀寫超時時間大概是120秒(真是相當(dāng)久啊)

整理一下二者的區(qū)別

雖然兩種超時拋出的異常都是SocketTimeoutException ,但是第一種連接超時,出現(xiàn)這種異常一般是ip或者端口填錯了。而第二種情況能出現(xiàn)的話,說明連接肯定建立成功了,可能是通訊的另一端響應(yīng)的過慢,導(dǎo)致等待數(shù)據(jù)傳達(dá)的過程中超時了。

用一個現(xiàn)實生活中的例子的話。第一種情況就是打電話過去沒人接,等了10秒都沒人接我就掛了。第二種情況就是電話打通了,我等了你10秒你不給我說話,那我就掛了

設(shè)置socket超時時間的那些坑

通常情況下 這樣設(shè)置socket超時時間

方式1

final Socket socket = new Socket("ip","port");//自動開始連接ip
?
socket.setSoTimeout(Constants.userRequestOutTime);//設(shè)置超時時間
OutputStream outStream = socket.getOutputStream();

方式2

? ? ? ? final Socket socket = new Socket();
? ? ? ? InetSocketAddress socketAddress = new InetSocketAddress(Constants.ip,
? ? ? ? ? ? ? ? Integer.parseInt(Constants.port));
??
? ? ? ? //設(shè)置 超時時間
? ? ? ? socket.setSoTimeout(Constants.userRequestOutTime);
? ? ? ? socket.connect(socketAddress);//開始連接ip
? ? ? ?//
? ? ? OutputStream outStream = null;
? ? ? InputStream inStream = null;

但是 發(fā)現(xiàn) 在服務(wù)端沒有開啟的情況下 超時時間實際是30s,不是所設(shè)置的,結(jié)果研究發(fā)現(xiàn)

socket.setSoTimeout設(shè)置的是讀取/輸入io流數(shù)據(jù)時的超時時間
//--
socket.connect(socketAddress, Constants.userRequestOutTime);

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

相關(guān)文章

  • 詳細(xì)易懂帶你了解Spring中的注解

    詳細(xì)易懂帶你了解Spring中的注解

    這篇文章主要介紹了詳細(xì)易懂帶你了解Spring中的注解,Spring的一個核心是IOC,是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用Spring注解方式或者Spring XML配置方式,需要的朋友可以參考下
    2023-08-08
  • Spring MVC參數(shù)自動綁定List的解決方法

    Spring MVC參數(shù)自動綁定List的解決方法

    這篇文章主要為大家詳細(xì)介紹了Spring MVC參數(shù)自動綁定List的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 使用@JsonFormat的一個坑及解決

    使用@JsonFormat的一個坑及解決

    這篇文章主要介紹了使用@JsonFormat的一個坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 基于SpringBoot實現(xiàn)上傳2種方法工程代碼實例

    基于SpringBoot實現(xiàn)上傳2種方法工程代碼實例

    這篇文章主要介紹了基于SpringBoot實現(xiàn)上傳工程代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • maven?傳遞依賴的實現(xiàn)

    maven?傳遞依賴的實現(xiàn)

    本文主要介紹了Maven中傳遞依賴的處理方式,如scope=compile影響依賴傳遞,使用排除不需要的依賴,以及如何通過查看依賴樹解決運行時錯誤,特別是在依賴排除后可能導(dǎo)致的運行時缺少必需包的問題,感興趣的可以了解一下
    2024-10-10
  • java對象轉(zhuǎn)成byte數(shù)組的3種方法

    java對象轉(zhuǎn)成byte數(shù)組的3種方法

    這篇文章主要為大家詳細(xì)介紹了java對象轉(zhuǎn)成byte數(shù)組的3種方法,具有一定的參考價值,感興趣的朋友可以參考一下
    2018-06-06
  • Intellij IDEA集成JProfiler性能分析工具

    Intellij IDEA集成JProfiler性能分析工具

    作為Java程序員,性能分析是我們必須掌握的技能之一,在性能分析中,JProfiler是一款非常強(qiáng)大的工具,本文就來介紹一下Intellij IDEA集成JProfiler性能分析工具,就有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • SpringBoot整合EasyExcel實現(xiàn)批量導(dǎo)入導(dǎo)出

    SpringBoot整合EasyExcel實現(xiàn)批量導(dǎo)入導(dǎo)出

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合EasyExcel實現(xiàn)批量導(dǎo)入導(dǎo)出功能的相關(guān)知識,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下
    2024-03-03
  • Spring核心容器之BeanDefinition解析

    Spring核心容器之BeanDefinition解析

    這篇文章主要介紹了Spring核心容器之BeanDefinition解析,Spring 將管理的對象稱之為 Bean,容器會先實例化 Bean,然后自動注入,實例化的過程就需要依賴 BeanDefinition,需要的朋友可以參考下
    2023-11-11
  • 都9102年了,你還用for循環(huán)操作集合嗎

    都9102年了,你還用for循環(huán)操作集合嗎

    這篇文章主要給大家介紹了關(guān)于java中for循環(huán)操作集合使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論

洞头县| 县级市| 鞍山市| 西昌市| 阿克陶县| 潍坊市| 缙云县| 嘉善县| 武乡县| 甘谷县| 陵水| 阳东县| 都江堰市| 滕州市| 杭锦旗| 铜川市| 永登县| 福贡县| 雅江县| 公主岭市| 黄龙县| 腾冲县| 睢宁县| 绿春县| 榆树市| 越西县| 井陉县| 遂川县| 沾益县| 阿鲁科尔沁旗| 涪陵区| 怀安县| 罗源县| 汕头市| 繁昌县| 新乐市| 霍州市| 定南县| 长宁县| 城固县| 柞水县|