Стоит ли вызывать ServerSocket в потоке-демоне?

193
13 апреля 2017, 16:35

Пишу небольшое клиент-серверное приложение с использованием сокетов. Появился вопрос. Для приема подключений со стороны клиентов на сервере формируется ServerSocket. Для удобства работы с серверной частью выделил его в отдельный поток. Но вот проблема: когда он ожидает нового подключения (serverSocket.accept()) этот поток никак нельзя прервать - он не реагирует на interrapt, т.к. цикл стоит на месте до тех пор, пока не появится новое подключение. Тем самым возникает проблема - главная нить уже отработала (я хочу завершить работу сервера), но т.к. поток с ServerSocket еще жив - программа не завершается. Вопрос по матчасти. Если я сделаю поток с сервер-сокетом демоном, при закрытии основого потока как поведет себя подключение в потоке демоне? Корректно закроется или просто прервется? Код метода run() ниже:

public void run() { //основной метод нити
        try (ServerSocket serverSocket = new ServerSocket(settings.getPort())) { //создает серверный сокет
            ConsoleHelper.writeMessage("SocketServer запущен");
            while (true) {
                Socket socket = serverSocket.accept(); //слушаем входящие запросы на подключение
                new Handler(socket).start(); //при получении запроса формируем новую нить, отвечающую за работу с клиентом, и запускаем ее
                continue; //после этого снова продолжаем слушать запросы
            }
        } catch (IOException e) { //в случае, если создать серверный сокет не удалось, либо он выкинул исключение во время работы,
            ConsoleHelper.writeMessage("Произошла ошибка работы с сетью!"); //выводится сообщение в консоль
            ConsoleHelper.writeMessage("============================================");
            ConsoleHelper.writeMessage(e.getMessage()); //а так же информация о самом исключении
            ConsoleHelper.writeMessage("============================================");
            return;
        }
    }
READ ALSO
FirebaseRecyclerAdapter добавить последний элемент

FirebaseRecyclerAdapter добавить последний элемент

Как сделать так чтоб при добавлении новых элементов в список, последний элемент, который там есть не изменялся и при нажатии на него открылось...

210
Почему метод всегда возвращает 0

Почему метод всегда возвращает 0

Есть метод, но почему то он всегда возвращает 0, а список заполняется в чем проблема?

212
Проблема с RecycleView

Проблема с RecycleView

В тестовом приложении я пытаюсь работать с RecyclerView и прокручивать recycleview items синхронноОднако во время горизонтальной прокрутки у меня появляется...

345
Android и bitrix

Android и bitrix

Есть сайт на битриксе, к которому подключена база данныхЧерез сайт можно заказать еду (сайт службы доставки), заказ вносится в базу

180