Этот фрагмент кода из TCP вспомогательной функции я сделал в Android Java:Почему это использование Socket.setSoTimeout() не работает?
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 сокетов или это просто ужасно поддерживается?
Знаете ли вы, что время ожидания подключения отличается от setSoTimeout? setSoTimeout будет блокировать вызов read() для данной миллисекунды. если истечение таймаута истекает, возникает исключение java.net.SocketTimeoutException, хотя Socket все еще действует. –
Спасибо, что я установил таймаут соединения на создание сокета тоже сейчас. –