官术网_书友最值得收藏!

4.1.3 套接字超時

從套接字讀取信息時,在有數據可供訪問之前,讀操作將會被阻塞。如果此時主機不可達,那么應用將要等待很長的時間,并且因為受底層操作系統的限制而最終會導致超時。

對于不同的應用,應該確定合理的超時值。然后調用setSoTimeout方法設置這個超時值(單位:毫秒)。

如果已經為套接字設置了超時值,并且之后的讀操作和寫操作在沒有完成之前就超過了時間限制,那么這些操作就會拋出SocketTimeoutException異常。你可以捕獲這個異常,并對超時做出反應。

另外還有一個超時問題是必須解決的。下面這個構造器:

會一直無限期地阻塞下去,直到建立了到達主機的初始連接為止。

可以通過先構建一個無連接的套接字,然后再使用一個超時來進行連接的方式解決這個問題。

如果你希望允許用戶在任何時刻都可以中斷套接字連接,請查看4.3節。

java.net.Socket 1.0

·Socket()1.1

創建一個還未被連接的套接字。

·void connect(SocketAddress address)1.4

將該套接字連接到給定的地址。

·void connect(SocketAddress address,int timeoutInMilliseconds)1.4

將套接字連接到給定的地址。如果在給定的時間內沒有響應,則返回。

·void setSoTimeout(int timeoutInMilliseconds)1.1

設置該套接字上讀請求的阻塞時間。如果超出給定時間,則拋出一個Interrupted-IOException異常。

·boolean isConnected()1.4

如果該套接字已被連接,則返回true。

·boolean isClosed()1.4

如果套接字已經被關閉,則返回true。

主站蜘蛛池模板: 巴彦县| 广丰县| 麟游县| 娱乐| 巴南区| 沙河市| 崇义县| 南川市| 拉萨市| 呼和浩特市| 新龙县| 芦山县| 无棣县| 临高县| 漳平市| 东乡族自治县| 福建省| 秦安县| 陕西省| 穆棱市| 长海县| 汉阴县| 桓仁| 彭泽县| 永定县| 紫云| 临沭县| 平定县| 东乡族自治县| 英德市| 巴彦淖尔市| 即墨市| 彰武县| 梧州市| 蒙城县| 民丰县| 托克逊县| 济源市| 临洮县| 务川| 凤城市|