Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Java socket timeout

#java #сокет


Проект

В общем вот ссылка на проект, реализована игра быки-коровы:
сервер генерирует "слово" из 4 цифр, а клиент пытается его отгадать. Налажено подключение
и отключение. Но не могу реализовать тайм аут, если пользователь или сервер долгое
время не получали сообщений.
Максимум что удавалось, это в контроллере Клиента вызывать в методе нажатия кнопки
после считывая данных функцию setOutTimeout, или которая бы сверяла System.currentMills
заданную перед проверкой и после, все в целом отрабатывает и закрывает сокет, но появляется
ошибка в Моделе: Stream closed.
    


Ответы

Ответ 1



В общем, реализовал как смог, с помощью костылей. class TimeoutThread extends Thread { private final int time; private boolean isStop = false; public TimeoutThread(int time) { super(); this.time = time; } public void stopCheckTimeout() { this.isStop = true; } @Override public void run() { try { System.out.println("start"); long endTime = System.currentTimeMillis() + time; count = time / 1000; while (!isStop) { count--; Thread.sleep(1000); System.out.println("ooo"); ClientPresenter.getInstance().handleResult(String.valueOf(count)); if (System.currentTimeMillis() > endTime) { System.out.println("disc"); disconnect(); break; } } System.out.println("finish"); } catch (Exception e) { e.printStackTrace(); } } И использовал: new Thread(() -> { TimeoutThread timeoutThread = new TimeoutThread(10000); while (status) { try { if (isReceive()) { timeoutThread.stopCheckTimeout(); //stop current timeout boolean gameFinished = check(); if(gameFinished) { return; } timeoutThread = new TimeoutThread(10000); // start new timeoutThread.start(); } } catch (Exception e) { status = false; } } }).start();

Комментариев нет:

Отправить комментарий