为什么 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 秒对于读取超时来说也短得可笑。尝试十个或三十个。
此代码片段来自我在 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 秒对于读取超时来说也短得可笑。尝试十个或三十个。