Чат (11)

  • 28
  • Недоступна
Пришло время написать главный метод класса Handler, который будет вызывать все вспомогательные методы, написанные ранее. Реализуем метод void run() в классе Handler. Он должен: 1) Выводить сообщение, что установлено новое соединение с удаленным адресом, который можно получить с помощью метода getRe
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (166)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений
Уровень 29
26 сентября, 17:14
Пробовал по разному расставлять try-catch, используя метод научного тыка. Все время один и тот же результат: Метод run() должен корректно обрабатывать исключения IOException и ClassNotFoundException. После 4го непрохождения валидации, решил еще раз прочитать, что должен делать метод run. Поэтому, если кто-то наступит на те же грабли, читаем внимательно о работе метода и делаем в той последовательности, буквально как написано. Правда, я так и не понял смысл п.7., а именно, что означает "обеспечить закрытие соединения"( По правильному решению - это выполнение п.8 и далее. И выходит, что закрытие - это удаление юзера с рассылкой сообщения. Может кто сможет дать пояснения?
LuneFox богатый программист в далёких мечтах Expert
2 октября, 15:02
Закрытие - это не удаление юзера. Кода мы открываем какие-либо ресурсы, их обязательно в конце нужно закрывать. Ресурсом может быть, например, файл, в который мы что-то пишем, поток ввода/вывода, в нашем случае это сокет. Если оставить ресурс незакрытым, он "подвиснет" в рабочем состоянии и будет занят, даже когда действительная работа с ним уже завершилась. Мы должны быть уверены, что при любом поведении нашей программы (остановка цикла естественным способом, по принуждению или во время возникновения ошибки) ресурс будет закрыт. Для этого мы можем использовать метод close(), а ещё есть вариант использовать try with resources, тогда ресурс, объявленный в дополнительных параметрах к try, будет автоматически закрыт при выходе из блока try. Если я не ошибаюсь, ресурс в этом случае должен имплементировать интерфейс Closeable (закрывабельный). Короче говоря - почитал книгу в библиотеке - закрой и поставь на полку, если оставишь её на столе в открытом состоянии, другие посетители библиотеки будут думать, что её кто-то читает (просто отошёл), и не смогут её взять. А если читатель умер, то она так и останется лежать на столе, пока библиотеку не снесут.
Максим Дудин
Уровень 30, Калининград
10 августа, 09:45
делал удаление через итератор если итератор.getKey.equal(userName), то connectionMap.remove(итератор).... и потом общая рассылка.. Ни фига, не нравиться Просто - если userName не null то connectionMap.remove(userName) и рассылка
PaiMei in J# Grand Master в Eagles' Claw
8 сентября, 09:58
Проверка на null не нужна, так как "Мапы" из пакета concurrent запрещают помещать в себя null-евые объекты.
Anonymous #2489173
Уровень 35
15 июня, 03:31
Не очень понимаю, как этот метод работает. Мы же вызываем serverMainLoop с бесконечным циклом. Раз он никогда не прервётся, мы же никогда не доберёмся к девятому пункту с удалением юзера?
Максим Дудин
Уровень 30, Калининград
10 августа, 09:40
а там, наверное, в конце добавиться какое-нибудь слово "exit" по которому будет выход из цикла
Serhio Duran
Уровень 36, Мариуполь, Украина
1 июня, 12:12
Сервер то готов, а дальше что с ним делать?))
Maks Panteleev
Уровень 41, Москва, Россия
26 мая, 07:50
Удивительно как я сходу валидацию прошел)) в конце сделал через try with resources с доп блоками кэч и файнали
Николай Т.
Уровень 40, Рязань, Россия
6 мая, 17:14
MessageType.USER_REMOVED, userName + " был удален" валидатор отказывался принимать. Перепробовал кучу вариантов, пока не подсмотрел что надо USER_REMOVED, userName, как-то тупо или я чего-то в условии не дочитал?
Евгений
Уровень 37, Коряжма, Россия
9 апреля, 13:41
Наш сервер полностью готов. Попробуй его запустить. ... спасибо, но че с ним дальше то делать🤣🤣🤣
LuneFox богатый программист в далёких мечтах Expert
2 октября, 15:11
Убедиться, что он стартует, прослушивает порт и не крашится)
Anonymous #2481357
Уровень 37
8 апреля, 12:10
вот есть условия задачи, где всё четко описано. делаешь и получается. а есть вот такие, когда понимаешь, что задание не чёткое и по любому ты поймешь его не правильно.
Даниил Александрович
Уровень 35, Тамбов , Россия
20 марта, 06:31
задача простая, делать надо только по требованиям а не ТЗ т.к. там все дано и методы и ппраметры и последовательность. задание большое с мобилы задрался это делать еще и редактор конский. подсказки все какието левые все руками наберай. с требований скопировать возможности нет. с ТЗ копируешь большие строки на пробелах получаешь ошибку неопознанные символы но в целом реально сделать, многое в голове надо держать. удачи.
Den
Уровень 30, Украина
25 февраля, 22:35
"Прежде чем завершиться, метод run() должен удалять из connectionMap запись соответствующую userName, и отправлять всем участникам чата сообщение о том, что текущий пользователь был удален." Если не проходит, как внутри, так и снаружи try – finally в помощь
Е К
Уровень 41, Краснодар, Россия
2 апреля, 14:58
У меня из-за этого пункта три попытки... Удалял из мапы не по имени, а по и ключу и по значению... А try сделал сразу с ресурсами - на создание соединения.
Anonymous #2481357
Уровень 37
8 апреля, 12:08
у меня с finelly не приняли. и в решении оно оно не используется.
Лёхансан Junior Java Developer в Senla
20 апреля, 20:39
У меня эта логика была помещена только в блок catch(). Но в соответствии с условием задачи, она должна быть еще и после выполнения serverMainLoop().