bufferedReader.read()正在阻止,但仅在某些设备上

时间:2018-12-14 10:40:51

标签: java android sockets

我构建了一个应用程序,用于将数据发送到服务器,并且服务器正在响应。 该应用程序可在所有三星设备上完美运行。 我以为它已经完成了,但是后来我得到了一部新手机,即小米的pocophone F1。 它第一次工作50/50,但是第二次它在.read()/ .readline()(包含/ r / n的答案)处阻塞。 然后开始尝试其他人,对华为也无效。

我该如何调试为什么read()确实阻塞了?

在Samsung上,它可以工作100/100次。 在其他情况下,它是2/100倍,到达.read()的速度要慢得多,而不是-1。

有关服务器的问题: (也许我在那做错了) 发送响应后,我是否必须关闭套接字? (我不想建立实时连接,只需请求响应就可以完成响应。) 目前,如果阅读完毕,我将关闭客户端的套接字。 (但上面说过,有时它永远不会完成或到达.read()。)

1 个答案:

答案 0 :(得分:1)

据我了解-您正在单独的Thread中从套接字执行读取-如果没有,则应该这样做。 完成从套接字读取的操作后,您可以:

  • 从其他线程调用socket.close-这将取消对read上从套接字阻塞的所有线程的计时
  • 中断线程-这将使read方法抛出InterruptedException-确保您正确处理了

或者-您的服务器可以关闭连接