Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Java / JavaScript


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

vladisslav
Статус: 5-й класс
Рейтинг: 834
∙ повысить рейтинг »
Botsman
Статус: Профессионал
Рейтинг: 524
∙ повысить рейтинг »
Evgenijm
Статус: 10-й класс
Рейтинг: 307
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Java/JavaScript

Номер выпуска:652
Дата выхода:06.11.2009, 19:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:485 / 107
Вопросов / ответов:1 / 1

Вопрос № 173897: Здраствуйте Уважаемые эксперты, Мне нужно написать на яве многоклиентный чат, один сервер и несколько клиентов, Подскажите пожалуйста как это можно реализовать? Если клиент один, то всё просто, а если много, как узнать когда от кого приходят да...



Вопрос № 173897:

Здраствуйте Уважаемые эксперты,
Мне нужно написать на яве многоклиентный чат, один сервер и несколько клиентов,
Подскажите пожалуйста как это можно реализовать? Если клиент один, то всё просто, а если много, как узнать когда от кого приходят данные на сервер? На c++ использовал функцию select() и потом FD_ISSET, как можно подобное зделать на яве?
В приложении каркас одноклиентного сервера.

Отправлен: 01.11.2009, 18:06
Вопрос задал: Станислав, 2-й класс
Всего ответов: 1
Страница вопроса »


Отвечает Evgenijm, 10-й класс :
Здравствуйте, Станислав.
Точно также узнавать. Данные-то приходят через определенный сокет.
Я бы сделал так: класс ClientConnection. Каждый его экземпляр крутится в своем потоке.
В нем поля с параметрами соединения.
Метод ServeClient:
1 ждет соединения.
2 запускает новый экземпляр класса в новом потоке
3 выполняет идентификацию пользователя (логин/пароль)
4 Регистрирует себя в списке соединений
5 В цикле ждет строки от пользователя
6 Каждую строку передает методу EchoMessage.
7 После разрыва соединения убирает себя из списка соединений и завершает свой поток.

Статическое поле - коллекция ActiveConnections - список всех работающих соединений.

Статический синхронизованный метод EchoMessage:
В цикле проходит по всем соединениям и пересылает каждому строку-параметр.

При запуске сервера создаем первый объект соединения и запускаем его метод ServeClient в новом потоке. Он сам следующий запустит при новом соединении. Пото м он просто ждет сообщения от пользователя и передает их методу EchoMessage, а тот уже их рассылает каждому. Можно это все сделать и в одном потоке с асинхронными вызовами, но это будет гораздо сложней выглядеть.
Клиента написать попроще. Но там тоже 2 потока: один ожидает ввод пользователя, другой - сообщение от севера.
Если где-то застрянете - обращайтесь. Но на Яве я такой код писать не буду, я уже не очень хорошо язык помню. На С#, возможно, написал бы.

Ответ отправил: Evgenijm, 10-й класс
Ответ отправлен: 01.11.2009, 22:02

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 256091 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.10 от 26.10.2009

    В избранное