1

我正在连接到 Web 服务,但没有在 HttpURLConnection 上设置任何连接超时和读取超时。默认连接超时和读取超时是多少?它依赖于Android手机吗?或者 Android/Java 是否有自己的超时默认值?

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

4

3 回答 3

3

你做过研究吗?默认值在文档中有详细说明。以下是相关部分:

public void setConnectTimeout (int timeout) 自:API 级别 1

设置与此 URLConnection 实例指向的资源的连接的超时值(以毫秒为单位)。如果此时无法建立连接,则会引发 SocketTimeoutException。默认值为 0,表示无限超时。

public void setReadTimeout (int timeout) 自:API 级别 1

以毫秒为单位设置从已建立连接的输入流中读取资源的超时值。如果此时无法建立连接,则会引发 SocketTimeoutException。默认值为 0,表示无限超时。

还有关于超时的注释:

URLConnection 支持两种超时:连接超时和读取超时。默认情况下,操作永远不会超时。

您正在连接的服务器可能会使您的客户端超时。

于 2012-04-03T03:34:43.930 回答
0

如果对象中的getConnectTimeoutandgetReadTimeout返回零,那么这确实意味着无穷大。这是从底层URLConnection类继承的。

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

于 2012-04-03T03:32:10.750 回答
0

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

于 2014-11-12T22:31:51.930 回答