我构建了一个应用程序,用于将数据发送到服务器,并且服务器正在响应。 该应用程序可在所有三星设备上完美运行。 我以为它已经完成了,但是后来我得到了一部新手机,即小米的pocophone F1。 它第一次工作50/50,但是第二次它在.read()/ .readline()(包含/ r / n的答案)处阻塞。 然后开始尝试其他人,对华为也无效。
我该如何调试为什么read()确实阻塞了?
在Samsung上,它可以工作100/100次。 在其他情况下,它是2/100倍,到达.read()的速度要慢得多,而不是-1。
有关服务器的问题: (也许我在那做错了) 发送响应后,我是否必须关闭套接字? (我不想建立实时连接,只需请求响应就可以完成响应。) 目前,如果阅读完毕,我将关闭客户端的套接字。 (但上面说过,有时它永远不会完成或到达.read()。)
答案 0 :(得分:1)
据我了解-您正在单独的Thread
中从套接字执行读取-如果没有,则应该这样做。
完成从套接字读取的操作后,您可以:
socket.close
-这将取消对read
上从套接字阻塞的所有线程的计时read
方法抛出InterruptedException
-确保您正确处理了或者-您的服务器可以关闭连接