【问题标题】:Android SocketTimeoutException on WiFi using Retrofit / OkHttpClient使用 Retrofit / OkHttpClient 在 WiFi 上的 Android SocketTimeoutException
【发布时间】:2017-03-23 08:00:34
【问题描述】:

我知道有人问过类似的问题,但这个问题略有不同。

我们有一个应用可以与我们的服务器建立一些 HTTP 连接。

LG Nexus 5XSumsung Galaxy 5 上运行应用时,使用我们的 3 个 WiFi 路由器中的任何一个,连接 超时(“SocketTimeoutException: timeout”由于“SocketException: Socket closed”)。 如果我们使用蜂窝网络、设备之间的网络共享或连接的笔记本电脑上的模拟器,连接不会超时到相同的(有问题的)WiFi 路由器。

需要指出的是,路由器连接到不同的 ISP。

有没有人经历过类似的事情或有想法?

谢谢

【问题讨论】:

  • 可能你的wifi路由器屏蔽了手机的mac地址
  • 检查你是否使用了正确的baseurl?在浏览器或邮递员中点击相同的 API 并检查它是否正常工作?
  • 确实检查了 LG 上 Chrome 的 url 并且它有效。该应用确实连接到本地运行的服务器(在同一网络上)。
  • 可能是某些路由器对访问URL有限制,您可以检查一下路由器的安全设置。
  • 我们可以使用这些路由器从这些设备上的 Chrome 或笔记本电脑上的模拟器访问 URL。问题似乎出在这些设备上的路由器和应用程序(Retrofit、OkHttp ?)之间。

标签: android timeout wifi retrofit okhttp


【解决方案1】:

已解决:尝试 GET 而不是 POST(JSON 主体约为 4K 字节)似乎工作正常。因此,在与服务器端的 tcpdump 会话之后,结果表明请求确实到达了服务器,但它“损坏了”。前约 300 字节和最后约 1000 字节确实到达服务器,但中间约 2500 字节 丢失(可能是由于某些服务提供商基础设施/整形器或其他原因)。

在任何情况下,将 OKHttpClient 实例的缓冲区大小(为其提供新的 SocketFactory)降低到 512 即可。

感谢所有试图提供帮助的人。

【讨论】:

    猜你喜欢
    • 2014-06-14
    • 2019-11-08
    • 1970-01-01
    • 2014-05-04
    • 2016-10-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多