![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
brave |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 7.3.2010 Репутация: нет Всего: нет |
Доброго времени суток. Пишу небольшой чат, но не получается сообщение с сервера отослать всем клиентам. Записываю клиентские сокеты в коллекцию при создании, а потом в цикле вытягиваю с коллекции и отсылаю сообщение принятое на вход сервера - не работает. Слышал, что эта задача реализуется с помощью паттерна Observer, но хотелось бы разобраться, где просчет в моем примере. Всего 4 класса(пока что):
Chat.java - сервер
ServerThreads.java - объект Runnable
Client.java - Клиент
SocketList.java - коллекция сокетов
|
||||||||
|
|||||||||
brave |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 7.3.2010 Репутация: нет Всего: нет |
У меня возникает два сомнения:
1. Имеет ли вообще смысл сохранять сокеты в коллекцию? из ServerThreads.java:
Оно вообще будет работать, если я его потом из коллекции вытяну, возьму OutputStream и отправлю сообщение в этот поток. Это сообщение придет клиенту? из ServerThreads.java:
2. Мне кажется, что клиент как-то неправильно ожидает входящие сообщения. Ведь ему их нужно принимать от двух разных Scanner, один - входящий поток сокета, а второй - поток с клавиатуры. Мне кажется они как-то накладываются что-ли... из Client.java:
Это сообщение отредактировал(а) brave - 19.10.2012, 15:56 |
||||||
|
|||||||
brave |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 7.3.2010 Репутация: нет Всего: нет |
Решил попробовать собирать в коллекцию не сокеты, а потоки. Только застрял на вопросе, как отослать сообщение потоку. Написал вот такой вот метод:
Вроде как должно работать, но не работает... Может кто знает, в чем проблема? |
|||
|
||||
brave |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 7.3.2010 Репутация: нет Всего: нет |
Отредактировал, теперь сообщение, которое пришло на сервер, отсылается всем клиентам подключенным к серверу, но... появилась некая очередь сообщений на сервере и клиент не может получить сообщение пока сам не отправит. Например, первый клиент пишет hi, ему сразу это hi возвращается, а второй ничего не получит пока сам не напишет что-то и т.д. Я думаю, что дело в методе клиента, который слушает поток с сервера и поток с клавиатуры:
Подскажите, пожалуйста, кто знает, в чем проблема? Застрял на этом месте и не могу двигаться дальше... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |