【问题标题】:bufferedReader.read() is blocking but only on some devicesbufferedReader.read() 被阻塞,但仅在某些设备上
【发布时间】:2018-12-14 10:40:50
【问题描述】:

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

如何调试 read() 究竟为何阻塞?

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

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

【问题讨论】:

  • 数据写入完成后应关闭服务器端的socket。读取完数据后在客户端也一样。
  • 好的,谢谢,那我试试这个。奇怪的是它有时会起作用......

标签: java android sockets


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我在 DoInBackround 线程中进行操作。感谢您的回答,这听起来不错。很高兴知道中断的事情。问候。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多