Java中Socket設(shè)置連接超時(shí)的代碼分享
前言
大家都知道Java的Socket如果連接不到指定IP和Port的主機(jī),就會拋出IOException異常,而通常情況下,從連接到出現(xiàn)IOException會有一段不定的時(shí)長,就是所謂的超時(shí)時(shí)長,如果超時(shí)時(shí)長過長,在開發(fā)時(shí)會影響測試,如果代碼成了產(chǎn)品,又會非常的影響用戶體驗(yàn),那么要怎么設(shè)置這個(gè)時(shí)長呢?下面來一起看看詳細(xì)的介紹:
Socket的類提供了一個(gè)方法:
public void connect(SocketAddress endpoint, int timeout) throws IOException
參數(shù):
- endpoint – SocketAddress 提供主機(jī)IP和Port
- timeout – 要使用的超時(shí)值(以毫秒為單位)。
該方法用于將Socket連接到指定的服務(wù)器,并設(shè)定一個(gè)超時(shí)值。超時(shí)值設(shè)定為大于0時(shí),當(dāng)超時(shí)后,就會拋出異常,停止連接,而超時(shí)值設(shè)為0將無限超時(shí)。
因此,使用上述方法就可以設(shè)置Socket連接的超時(shí)時(shí)長了,代碼如下:
// 設(shè)置ip和prot String ip = "127.0.0.1"; int port = 8888; // 創(chuàng)建Socket Socket client = new Socket(); // 設(shè)置發(fā)送地址 SocketAddress addr = new InetSocketAddress(ip, port); // 超時(shí)1秒,并連接服務(wù)器 client.connect(addr, 1000);
解釋一下上面的SocketAddress和InetSocketAddress,這兩個(gè)類用于創(chuàng)建Socket連接地址,前者是抽象類,后者是前者的子類,通過構(gòu)造方法來創(chuàng)建地址:
public InetSocketAddress(String hostname, int port)
參數(shù):
- hostname – 主機(jī)名,也可以是ip
- port – 端口號
另外,InetSocketAddress還提供了一些與網(wǎng)絡(luò)相關(guān)的方法,比如常用的獲取本機(jī)IP的方法:
public final InetAddress getAddress()
這個(gè)方法返回一個(gè)InetAddress,然后通過InetAddress的方法獲取IP,如下:
public String getHostAddress()
那么獲取本機(jī)IP的代碼就是:
// client就是上面創(chuàng)建的Socket String host_ip = client.getAddress().getHostAddress();
那么,就到這里吧!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
詳解JAVA如何實(shí)現(xiàn)樂觀鎖以及CAS機(jī)制
悲觀鎖和樂觀鎖其實(shí)本質(zhì)都是一種思想,在JAVA中對于悲觀鎖的實(shí)現(xiàn)大家可能都很了解,可以通過synchronized、ReentrantLock加鎖實(shí)現(xiàn),本文不展開講解了。那么樂觀鎖在JAVA中是如何實(shí)現(xiàn)的呢?底層的實(shí)現(xiàn)機(jī)制又是什么呢?本文就來和大家詳細(xì)講講2022-12-12SpringBoot中通過AOP整合日志文件的實(shí)現(xiàn)
本文主要介紹了SpringBoot中通過AOP整合日志文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12spring cloud服務(wù)之間的調(diào)用之ribbon詳解
關(guān)于spring-cloud的服務(wù)調(diào)用,我們首先需要了解它的兩個(gè)核心組件Ribbon和Feign。接下來通過本文給大家詳細(xì)介紹spring-cloud服務(wù)之間的調(diào)用之ribbon,感興趣的朋友一起看看吧2021-08-08Java微信二次開發(fā)(一) Java微信請求驗(yàn)證功能
這篇文章主要為大家詳細(xì)介紹了Java微信二次開發(fā)第一篇,Java微信請求驗(yàn)證功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Java 數(shù)據(jù)庫時(shí)間返回前端顯示錯(cuò)誤(差8個(gè)小時(shí))的解決方法
本文主要介紹了Java 數(shù)據(jù)庫時(shí)間返回前端顯示錯(cuò)誤(差8個(gè)小時(shí))的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08Java實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)調(diào)度算法的示例代碼
時(shí)間片輪轉(zhuǎn)調(diào)度是一種最古老,最簡單,最公平且使用最廣的算法,這篇文章主要為大家介紹了如何利用Java實(shí)現(xiàn)這一算法,需要的可以參考一下2023-07-07java實(shí)現(xiàn)翻轉(zhuǎn)單詞順序列
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)翻轉(zhuǎn)單詞順序列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03