首页 > 解决方案 > bufferedReader.read() 被阻塞,但仅在某些设备上

问题描述

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

如何调试为什么 read() 会阻塞?

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

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

标签: javaandroidsockets

解决方案


据我了解-您正在单独从套接字执行读取Thread-如果您不这样做-您应该这样做。何时完成从套接字读取 - 您可以:

  • socket.close从其他线程调用- 这将解锁所有read从套接字阻塞的线程
  • 中断线程-这将使read方法抛出InterruptedException-确保您正确处理它

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


推荐阅读