- Java核心技术·卷Ⅱ:高级特性(原书第10版)
- (美)凯S.霍斯特曼
- 497字
- 2024-12-20 22:36:09
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。