【发布时间】:2016-03-16 10:14:45
【问题描述】:
这段代码 sn-p 来自我在 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 套接字有什么误解,或者它只是受到了可怕的支持?
【问题讨论】:
-
你知道 Connection Timeout 和 setSoTimeout 不同吗? setSoTimeout 将在给定的毫秒内阻塞 read() 调用。如果超时到期,则会引发 java.net.SocketTimeoutException,尽管 Socket 仍然有效。
-
谢谢,我现在也为套接字创建设置了连接超时。
标签: java android sockets tcp tcpclient