即使连接超时和读取超时设置为默认(无限),接收请求超时?

时间:2012-04-03 03:27:42

标签: android timeout httpurlconnection connection-timeout

我正在连接到Web服务,并且没有在HttpURLConnection上设置任何连接超时和读取超时。什么是默认连接超时和读取超时?它依赖于Android手机吗?或Android / Java有超时的默认值吗?

当我尝试获取连接超时(getConnectTimeout())和读取超时(getReadTimeout())的值时,它返回值0,我假设它等于无穷大。但是,即使它们的值为0,有时我仍然会收到请求超时错误。所以它们的价值不能等于无穷大。有人可以启发我吗?

3 个答案:

答案 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)

如果对象的getConnectTimeoutgetReadTimeout返回零,那么确实意味着无穷大。这是继承自基础URLConnection类。

您收到的异常可能是而不是一个SocketTimeoutException,您应该验证这一点 - 无论超时如何,都可以抛出IOException设置。

答案 2 :(得分:0)

connect()的Javadoc不正确。零为您提供平台连接超时,这不是无限的,但大约一分钟。您只能使用timeout参数减少此值,而connect(),不会增加它。