Android 如何查看OkHttp客户端的完整内部工作?改装插座关闭超时

Android 如何查看OkHttp客户端的完整内部工作?改装插座关闭超时,android,sockets,websocket,okhttp,Android,Sockets,Websocket,Okhttp,您好非常感谢您的时间,我有一个未知的改装问题,我唯一的线索是一个套接字关闭/超时消息,所以我想我可以帮助我有更多关于okhttp客户端和改装工作原理的信息,由于我了解套接字必须对HTTP客户机做更多的工作,我想了解更多关于okhttp客户机背后的内部工作原理,因为这可能会导致一个解决方案 这就是我的问题 我遇到了一个问题,就是通过在android应用程序上通过Post使用改造来获取一些数据。我的一个回调永远不会返回响应体,即使同一Web服务中的其他调用是稳定的,工作正常。这个错误相当随机,只有在

您好非常感谢您的时间,我有一个未知的改装问题,我唯一的线索是一个套接字关闭/超时消息,所以我想我可以帮助我有更多关于okhttp客户端和改装工作原理的信息,由于我了解套接字必须对HTTP客户机做更多的工作,我想了解更多关于okhttp客户机背后的内部工作原理,因为这可能会导致一个解决方案

这就是我的问题

我遇到了一个问题,就是通过在android应用程序上通过Post使用改造来获取一些数据。我的一个回调永远不会返回响应体,即使同一Web服务中的其他调用是稳定的,工作正常。这个错误相当随机,只有在android应用程序上使用改型时才会发生,而在web浏览器上使用postman或API工作正常时才会发生

我能够始终如一地复制错误的唯一方法是将android emulator上的网络类型从Full切换到HSDPA,或者切换到与Full或LTE不同的任何其他网络类型


我们找到了解决问题的方法。 在过去,我尝试的最高超时时间是在构建客户机时的5分钟,但如果不将其最大化,它构建的套接字似乎会关闭,因此我将超时时间改为一天,这样它就可以最大化超时时间

而且android系统或服务器实际上不会等待一天的响应,因此,在大多数情况下,如果服务器不重置连接,它会提供响应

java.net.SocketException:连接重置

在这些情况下,您只需将retryOnConnectionFailure设置为true,即使返回答案需要更多时间,它也会给出一个答案

我和管理服务器的人谈过,他告诉我问题在于HTTP客户端或改型无法在第一次尝试中重建消息,如果使用3g连接的响应体太长,以及在json中包含图像或散列值,则后续尝试更可能失败,就像我所做的那样 在json上放置完整图像的哈希

这是客户端的代码

val client = OkHttpClient.Builder()
            .connectTimeout(1, TimeUnit.DAYS)
            .readTimeout(1, TimeUnit.DAYS)
            .writeTimeout(1, TimeUnit.DAYS)
            .retryOnConnectionFailure(false)
            .callTimeout(1, TimeUnit.DAYS)
            .hostnameVerifier(HostnameVerifier { hostname, session -> true })
            .build()

他还告诉我,为了获得最好的结果,在使用HSDPA时,json应该小于1024字节,包括header和all。多达2024字节的响应体。

我们能够找到解决该问题的方法。 在过去,我尝试的最高超时时间是在构建客户机时的5分钟,但如果不将其最大化,它构建的套接字似乎会关闭,因此我将超时时间改为一天,这样它就可以最大化超时时间

而且android系统或服务器实际上不会等待一天的响应,因此,在大多数情况下,如果服务器不重置连接,它会提供响应

java.net.SocketException:连接重置

在这些情况下,您只需将retryOnConnectionFailure设置为true,即使返回答案需要更多时间,它也会给出一个答案

我和管理服务器的人谈过,他告诉我问题在于HTTP客户端或改型无法在第一次尝试中重建消息,如果使用3g连接的响应体太长,以及在json中包含图像或散列值,则后续尝试更可能失败,就像我所做的那样 在json上放置完整图像的哈希

这是客户端的代码

val client = OkHttpClient.Builder()
            .connectTimeout(1, TimeUnit.DAYS)
            .readTimeout(1, TimeUnit.DAYS)
            .writeTimeout(1, TimeUnit.DAYS)
            .retryOnConnectionFailure(false)
            .callTimeout(1, TimeUnit.DAYS)
            .hostnameVerifier(HostnameVerifier { hostname, session -> true })
            .build()

他还告诉我,为了获得最好的结果,在使用HSDPA时,json应该小于1024字节,包括header和all。最多2024字节的响应正文。

可能通过使用和共享链接粘贴完整日志(删除一些内容)。完整的日志理想情况下可以帮助人们了解发生了什么。完整的HttpLogInterceptor日志在我上面发布的pastebin上,但是如果你修改了Logcat或Java控制台日志,这就是问题所在控制台没有给我更多的信息,至少是使用它的方式。日志只有两行套接字关闭。java.net.SocketException:Socket closed detail message:Socket closed那不是更多信息,这就是为什么我在寻找获取更多信息的方法。可能通过使用和共享链接粘贴完整日志(删除一些内容)。完整的日志理想情况下可以帮助人们了解发生了什么。完整的HttpLogInterceptor日志在我上面发布的pastebin上,但是如果你修改了Logcat或Java控制台日志,这就是问题所在控制台没有给我更多的信息,至少是使用它的方式。日志只有两行套接字关闭。SocketException:Socket closed详细信息:Socket closed不是这样,没有更多信息,这就是为什么我在寻找获取更多信息的方法。