前言
大家都知道Java的Socket如果連接不到指定IP和Port的主機,就會拋出IOException異常,而通常情況下,從連接到出現IOException會有一段不定的時長,就是所謂的超時時長,如果超時時長過長,在開發時會影響測試,如果代碼成了產品,又會非常的影響用戶體驗,那么要怎么設置這個時長呢?下面來一起看看詳細的介紹:
Socket的類提供了一個方法:
1
2
|
public void connect(SocketAddress endpoint, int timeout) throws IOException |
參數:
- endpoint – SocketAddress 提供主機IP和Port
- timeout – 要使用的超時值(以毫秒為單位)。
該方法用于將Socket連接到指定的服務器,并設定一個超時值。超時值設定為大于0時,當超時后,就會拋出異常,停止連接,而超時值設為0將無限超時。
因此,使用上述方法就可以設置Socket連接的超時時長了,代碼如下:
1
2
3
4
5
6
7
8
9
|
// 設置ip和prot String ip = "127.0.0.1" ; int port = 8888 ; // 創建Socket Socket client = new Socket(); // 設置發送地址 SocketAddress addr = new InetSocketAddress(ip, port); // 超時1秒,并連接服務器 client.connect(addr, 1000 ); |
解釋一下上面的SocketAddress和InetSocketAddress,這兩個類用于創建Socket連接地址,前者是抽象類,后者是前者的子類,通過構造方法來創建地址:
1
|
public InetSocketAddress(String hostname, int port) |
參數:
- hostname – 主機名,也可以是ip
- port – 端口號
另外,InetSocketAddress還提供了一些與網絡相關的方法,比如常用的獲取本機IP的方法:
1
|
public final InetAddress getAddress() |
這個方法會返回一個InetAddress,然后通過InetAddress的方法獲取IP,如下:
1
|
public String getHostAddress() |
那么獲取本機IP的代碼就是:
1
2
|
// client就是上面創建的Socket String host_ip = client.getAddress().getHostAddress(); |
那么,就到這里吧!
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:https://www.juwends.com/tech/java/java_study_20160306_socket_timeout.html