此代码段来自我在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套接字的问题,还是只是非常支持?
答案 0 :(得分:1)
如果您不想要一个镜头读取超时,请不要设置短读取超时。将睡眠添加到网络代码永远不会解决任何问题。这只是浪费时间。您应该做的是将睡眠时间添加到超时。但即使是2.1秒,读取超时也很短暂。试试十,或三十。