欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

方法1

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

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

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

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

方法2

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

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

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

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流讀寫超時(shí)時(shí)間大概是120秒(真是相當(dāng)久?。?/p>

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

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

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

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

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

方式1

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

方式2

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

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

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

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

相關(guān)文章

  • 圖解Java排序算法之希爾排序

    圖解Java排序算法之希爾排序

    這篇文章主要為大家詳細(xì)介紹了Java排序算法之希爾排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java8通過(guò)CompletableFuture實(shí)現(xiàn)異步回調(diào)

    Java8通過(guò)CompletableFuture實(shí)現(xiàn)異步回調(diào)

    這篇文章主要介紹了Java8通過(guò)CompletableFuture實(shí)現(xiàn)異步回調(diào),CompletableFuture是Java?8?中新增的一個(gè)類,它是對(duì)Future接口的擴(kuò)展,下文關(guān)于其更多相關(guān)詳細(xì)介紹需要的小伙伴可以參考一下
    2022-04-04
  • java通過(guò)jni調(diào)用opencv處理圖像的方法

    java通過(guò)jni調(diào)用opencv處理圖像的方法

    今天小編就為大家分享一篇java通過(guò)jni調(diào)用opencv處理圖像的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 一文帶你深入了解Guava的緩存機(jī)制

    一文帶你深入了解Guava的緩存機(jī)制

    緩存在現(xiàn)代編程中的作用非常大,它能提高應(yīng)用性能,減少數(shù)據(jù)庫(kù)壓力,簡(jiǎn)直就是性能優(yōu)化的利器,本文主要來(lái)和大家聊聊Google?Guava的緩存機(jī)制,感興趣的小伙伴可以了解下
    2023-12-12
  • java中redis增刪查以及清理緩存的案例

    java中redis增刪查以及清理緩存的案例

    這篇文章主要介紹了java中redis增刪查以及清理緩存的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 淺談java中定義泛型類和定義泛型方法的寫法

    淺談java中定義泛型類和定義泛型方法的寫法

    下面小編就為大家?guī)?lái)一篇淺談java中定義泛型類和定義泛型方法的寫法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實(shí)現(xiàn)方式

    SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實(shí)現(xiàn)方式

    SpringBoot支持多種配置文件位置和格式,其中application.properties和application.yml是默認(rèn)加載的文件,配置文件可以根據(jù)環(huán)境通過(guò)spring.profiles.active屬性進(jìn)行區(qū)分,命令行參數(shù)具有最高優(yōu)先級(jí),可覆蓋其他所有配置
    2024-09-09
  • Java在PDF中替換文字詳解及可能遇到的問(wèn)題

    Java在PDF中替換文字詳解及可能遇到的問(wèn)題

    本文詳細(xì)介紹了如何使用Java和Spire.PDF?for?Java庫(kù)在PDF文檔中批量替換文字,包括替換特定文字的所有實(shí)例、第一個(gè)實(shí)例以及使用正則表達(dá)式,同時(shí),探討了可能遇到的問(wèn)題及其解決方案,需要的朋友可以參考下
    2024-09-09
  • springboot項(xiàng)目部署到寶塔的詳細(xì)圖文教程

    springboot項(xiàng)目部署到寶塔的詳細(xì)圖文教程

    網(wǎng)上關(guān)于寶塔運(yùn)行springBoot的東西說(shuō)有點(diǎn)迷糊,但是有一句話很重要,Spring boot項(xiàng)目只需要JDK環(huán)境即可部署成功,下面這篇文章主要給大家介紹了關(guān)于springboot項(xiàng)目部署到寶塔的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-05-05
  • SpringCloud?hystrix斷路器與全局解耦全面介紹

    SpringCloud?hystrix斷路器與全局解耦全面介紹

    什么是服務(wù)降級(jí)?當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)實(shí)際業(yè)務(wù)情況及流量,對(duì)一些服務(wù)和頁(yè)面有策略的不處理或換種簡(jiǎn)單的方式處理,從而釋放服務(wù)器資源以保證核心交易正常運(yùn)作或高效運(yùn)作
    2022-10-10

最新評(píng)論