Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Работа с сетью > Рассылка сообщения всем клиентам SocketServer |
Автор: brave 19.10.2012, 09:53 | ||||||||
Доброго времени суток. Пишу небольшой чат, но не получается сообщение с сервера отослать всем клиентам. Записываю клиентские сокеты в коллекцию при создании, а потом в цикле вытягиваю с коллекции и отсылаю сообщение принятое на вход сервера - не работает. Слышал, что эта задача реализуется с помощью паттерна Observer, но хотелось бы разобраться, где просчет в моем примере. Всего 4 класса(пока что): Chat.java - сервер
ServerThreads.java - объект Runnable
Client.java - Клиент
SocketList.java - коллекция сокетов
|
Автор: brave 19.10.2012, 15:53 | ||||||
У меня возникает два сомнения: 1. Имеет ли вообще смысл сохранять сокеты в коллекцию? из ServerThreads.java:
Оно вообще будет работать, если я его потом из коллекции вытяну, возьму OutputStream и отправлю сообщение в этот поток. Это сообщение придет клиенту? из ServerThreads.java:
2. Мне кажется, что клиент как-то неправильно ожидает входящие сообщения. Ведь ему их нужно принимать от двух разных Scanner, один - входящий поток сокета, а второй - поток с клавиатуры. Мне кажется они как-то накладываются что-ли... из Client.java:
|
Автор: brave 22.10.2012, 14:14 | ||
Решил попробовать собирать в коллекцию не сокеты, а потоки. Только застрял на вопросе, как отослать сообщение потоку. Написал вот такой вот метод:
Вроде как должно работать, но не работает... Может кто знает, в чем проблема? |
Автор: brave 23.10.2012, 11:28 | ||
Отредактировал, теперь сообщение, которое пришло на сервер, отсылается всем клиентам подключенным к серверу, но... появилась некая очередь сообщений на сервере и клиент не может получить сообщение пока сам не отправит. Например, первый клиент пишет hi, ему сразу это hi возвращается, а второй ничего не получит пока сам не напишет что-то и т.д. Я думаю, что дело в методе клиента, который слушает поток с сервера и поток с клавиатуры:
Подскажите, пожалуйста, кто знает, в чем проблема? Застрял на этом месте и не могу двигаться дальше... |