使用 Retrofit/OkHttpClient 的 WiFi 上的 Android SocketTimeoutException

标签 android timeout wifi retrofit okhttp

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

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

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

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

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

谢谢

最佳答案

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

无论如何,将 OKHttpClient 实例的缓冲区大小(为其提供一个新的 SocketFactory)降低到 512,就可以达到目的。

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

关于使用 Retrofit/OkHttpClient 的 WiFi 上的 Android SocketTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40508162/

相关文章:

android - 向下滑动刷新 Material Design

Android 应用无法构建——在依赖项的 androidx.work :work-runtime:2. 7.0-beta01 中指定的 minCompileSdk (31)

iPhone SDK : URL request not timing out

wifi - ESP32 : Error when activating Wi-Fi interface

java - 跟踪 GPS 位置 - 实时反馈

android - 如何修复屏幕顶部的布局

c# - 在 .NET 中动态更改 HttpClient.Timeout

timeout - rxjs 超时到第一个值

windows - 如何使用 VB6 或 BAT/CMD 列出连接到我的 WiFi 网络的设备?

java - 在for循环之外打印数组java