我正在连接到Web服务,并且没有在HttpURLConnection上设置任何连接超时和读取超时。什么是默认连接超时和读取超时?它依赖于Android手机吗?或Android / Java有超时的默认值吗?
当我尝试获取连接超时(getConnectTimeout()
)和读取超时(getReadTimeout()
)的值时,它返回值0,我假设它等于无穷大。但是,即使它们的值为0,有时我仍然会收到请求超时错误。所以它们的价值不能等于无穷大。有人可以启发我吗?
答案 0 :(得分:3)
你做过任何研究吗?默认值在documentation中详细说明。以下是相关部分:
public void setConnectTimeout(int timeout)从:API Level 1
设置建立连接的超时值(以毫秒为单位) 到此URLConnection实例指向的资源。一个 如果连接不能,则抛出SocketTimeoutException 在这个时间建立。 默认值为0表示无限 超时。强>
public void setReadTimeout(int timeout)从:API Level 1
设置从输入读取的超时值(以毫秒为单位) 已建立的资源连接流。一个 如果连接不能,则抛出SocketTimeoutException 在这个时间建立。 默认值为0表示无限 超时。强>
还有关于超时的说明:
URLConnection支持两种超时:连接超时和a 读取超时。默认情况下,操作永远不会超时。
您连接的服务器可能会超时您的客户端。
答案 1 :(得分:0)
如果对象的getConnectTimeout
和getReadTimeout
返回零,那么确实意味着无穷大。这是继承自基础URLConnection
类。
您收到的异常可能是而不是一个SocketTimeoutException
,您应该验证这一点 - 无论超时如何,都可以抛出IOException
设置。
答案 2 :(得分:0)
connect()
的Javadoc不正确。零为您提供平台连接超时,这不是无限的,但大约一分钟。您只能使用timeout
参数减少此值,而connect(),
不会增加它。