为什么使用Socket.setSoTimeout()不起作用?

时间:2015-12-10 17:01:55

标签: java android sockets tcp tcpclient

此代码段来自我在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套接字的问题,还是只是非常支持?

1 个答案:

答案 0 :(得分:1)

如果您不想要一个镜头读取超时,请不要设置短读取超时。将睡眠添加到网络代码永远不会解决任何问题。这只是浪费时间。您应该做的是将睡眠时间添加到超时。但即使是2.1秒,读取超时也很短暂。试试十,或三十​​。