| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Работа с сетью > каким образом чат всегда ожидает сообщение? |
| Автор: #Maestro# 16.7.2009, 16:39 | ||
| и всё же я не понял!! каким образом чат всегда ожидает сообщение? я так понимаю, что в конструкторе сервера запущено два потока: один для отправления сообщений, второй - ожидает получение сообщений. не получается создать второй поток. то есть как только сервер хочет получить сообщение - приложение виснет до тех пор пока сообщение не предёт.
как написать чат с работающими двумя потоками?? |
| Автор: Galaran 18.7.2009, 15:04 | ||||
| В твоём коде 1й поток просто стартует 2й и завершается. Т.е все действия в одном потоке. А надо для каждого коннекта создавать свой поток. Если у тебя, написано вот так:
то поток блокируется на чтении и, поэтому программа не принимает 2й коннект
В этом случае главный поток постоянно слушает входящие соединения и создает для каждого такого коннекта свой поток. Каждый дочерний поток блокируется в ожидании сообщения, но главный поток при этом продолжает слушать входящие коннекты. |
| Автор: #Maestro# 21.7.2009, 10:16 | ||
| извиняюсь, но по-моему в строке in = new BufferedReader(BufferedReader(new InputStreamReader(s.getInputStream())); после первой скобки нехватает слова "new". да и вообще конструктор ClientRunnable(Socket s) наверное, должен быть throws Exception вы проверяли этот код? к сожалению, приложение всё-таки продолжает виснуть... пока не дождётся сообщения, но s = ss.accept(); // находится в бесконечном цикле while... кстати класс, соответствующий "ClientRunnable" у меня вложенный, поэтому строка this.s = s; в моём случае оказалась лишней. или я зря делаю "ClientRunnable" вложенным??
|
| Автор: Galaran 27.7.2009, 02:30 | ||
| Сходу написал, хотел показать главный принцип. Зря поторопился Исправил и проверил, теперь работает:
У меня здесь ClientRunnable тоже вложенный. |