![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
#Maestro# |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.7.2008 Репутация: нет Всего: нет |
и всё же я не понял!!
![]() каким образом чат всегда ожидает сообщение? я так понимаю, что в конструкторе сервера запущено два потока: один для отправления сообщений, второй - ожидает получение сообщений. не получается создать второй поток. то есть как только сервер хочет получить сообщение - приложение виснет до тех пор пока сообщение не предёт.
как написать чат с работающими двумя потоками?? |
|||
|
||||
Galaran |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 25.5.2009 Репутация: нет Всего: 2 |
В твоём коде 1й поток просто стартует 2й и завершается. Т.е все действия в одном потоке. А надо для каждого коннекта создавать свой поток.
Если у тебя, написано вот так:
то поток блокируется на чтении и, поэтому программа не принимает 2й коннект
В этом случае главный поток постоянно слушает входящие соединения и создает для каждого такого коннекта свой поток. Каждый дочерний поток блокируется в ожидании сообщения, но главный поток при этом продолжает слушать входящие коннекты. |
||||
|
|||||
#Maestro# |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.7.2008 Репутация: нет Всего: нет |
извиняюсь, но по-моему в строке
in = new BufferedReader(BufferedReader(new InputStreamReader(s.getInputStream())); после первой скобки нехватает слова "new". да и вообще конструктор ClientRunnable(Socket s) наверное, должен быть throws Exception вы проверяли этот код? к сожалению, приложение всё-таки продолжает виснуть... пока не дождётся сообщения, но s = ss.accept(); // находится в бесконечном цикле while... кстати класс, соответствующий "ClientRunnable" у меня вложенный, поэтому строка this.s = s; в моём случае оказалась лишней. или я зря делаю "ClientRunnable" вложенным??
|
|||
|
||||
Galaran |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 25.5.2009 Репутация: нет Всего: 2 |
Сходу написал, хотел показать главный принцип. Зря поторопился
Исправил и проверил, теперь работает:
У меня здесь ClientRunnable тоже вложенный. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |