溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中Socket設(shè)置連接超時的代碼分享

發(fā)布時間:2020-10-03 22:09:02 來源:腳本之家 閱讀:147 作者:Juwend 欄目:編程語言

前言

大家都知道Java的Socket如果連接不到指定IP和Port的主機(jī),就會拋出IOException異常,而通常情況下,從連接到出現(xiàn)IOException會有一段不定的時長,就是所謂的超時時長,如果超時時長過長,在開發(fā)時會影響測試,如果代碼成了產(chǎn)品,又會非常的影響用戶體驗,那么要怎么設(shè)置這個時長呢?下面來一起看看詳細(xì)的介紹:

Socket的類提供了一個方法:

public void connect(SocketAddress endpoint, int timeout) 
    throws IOException

參數(shù):

  • endpoint – SocketAddress 提供主機(jī)IP和Port
  • timeout – 要使用的超時值(以毫秒為單位)。

該方法用于將Socket連接到指定的服務(wù)器,并設(shè)定一個超時值。超時值設(shè)定為大于0時,當(dāng)超時后,就會拋出異常,停止連接,而超時值設(shè)為0將無限超時。

因此,使用上述方法就可以設(shè)置Socket連接的超時時長了,代碼如下:

// 設(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);
// 超時1秒,并連接服務(wù)器
client.connect(addr, 1000);

解釋一下上面的SocketAddress和InetSocketAddress,這兩個類用于創(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()

這個方法會返回一個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í)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI