为什么 Socket.setSoTimeout() 的这种用法不起作用?

Why does this use of Socket.setSoTimeout() not work?

此代码片段来自我在 Android java:

中创建的 TCP 辅助函数
            socket.setSoTimeout(2000);
            InputStream inStream = socket.getInputStream();
            PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),
            true);

            out.println(message);

            BufferedReader input = new BufferedReader(new InputStreamReader(inStream));

            String tcpResult = "";

            if(lastCallMillis >= System.currentTimeMillis() - 100)
                Thread.sleep(100);

            tcpResult = input.readLine();

当第一行出现时,带有 "setSoTimeout" 的那一行,该方法失败并出现异常。 当我不设置超时时,它可以正常工作。

嗯..几乎我不得不插入这部分,因为如果连续快速使用套接字,它就会失败:

            if(lastCallMillis >= System.currentTimeMillis() - 100)
            Thread.sleep(100);

无论如何,我对使用 java 套接字有什么误解,还是它的支持太糟糕了?

如果您不希望镜头读取超时,请不要设置较短的读取超时。将睡眠添加到网络代码永远不会解决任何问题。这简直就是浪费时间。您应该做的是将睡眠时间添加到超时。但即使是 2.1 秒对于读取超时来说也短得可笑。尝试十个或三十个。