Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачка, предложите идею решения 
:(
    Опции темы
Paradox
Дата 2.3.2004, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Подскажите идею решения. Саму задачу решать не надо (хочу сам) интересны только идейки

Имеется задание на разработку реализации двух интерфейсов - клиента и
сервера. Клиент должен посылать сообщения на сервер и принимать от сервера
сообщения. Сервер должен принимать сообщения от клиентов и рассылать их всем
подключенным к нему клиентам. Клиент подключается к одному серверу.
Интерфейсы клиента и сервера: у сервера метод void message(const char *msg)
принимает сообщения от клиентов, у клиента метод void message(const char *msg)
принимает сообщения от сервера.
Предложите реализацию по данным требованиям.
Учесть возможность расширения функциональности клиента и/или сервера и
возможность изменения реализации клиента и/или сервера.


--------------------
---
PM MAIL WWW   Вверх
DKeN
Дата 24.3.2004, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.3.2004

Репутация: нет
Всего: нет



имеется сокет у сервера, который ожидает подключения(отдельный поток), клиент создает сокет который подключается к серверу, данный сервер подключив клиента, добавлет его в список клиеннтов(массив или список), и отправляет сообщение ему что он подключен.

клиент послал сообщение, сервер получив его, пересылает его клиентам которые в его списке.

ЗЫ. Поищи в нете исходники чатов...там какраз чаще всего такой принцип применяется...других вариантов помоему нету.
PM WWW ICQ YIM   Вверх
sergejzr
Дата 25.3.2004, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Если мессага имеет формат XML, можно будет Обьекты на клиентах инициализировать.
То есть передавать значения мемберов обьекта в формате XML.
Или ты другое раширение имел в виду?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Fantasist
Дата 25.3.2004, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Лучше всего для этого подходят различные схемы создания распределенных объектов, такие как DCOM и CORBA. В принципе и SOAP к ним относиться, но в такой задаче он будет не удобен.

Как я выяснил на собственном опыте, не так уж сложно написать собственную систему распределенных объектов. Смысл в том, чтобы передать клиетну интерфейс (это может быть указатель на интерфейс на сервере) и придумать схему кодирования вызовов методов. Потом клиент кодирует вызов (по правильному это называется маршалинг) в один пакет, туда же запихивает и полученный от сервера интерфейс - и все это дело переправляет серверу. Сервер декодирует пакет (демаршалинг), понимает что за метод надо вызвать и его вызывает. Потом таким же образом переправляет ответ.

Короче, советую CORBA посмотреть.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
DenDen
Дата 25.3.2004, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 25.3.2004

Репутация: нет
Всего: нет



Если хочешь писать все сам,
то существует такой алгоритм.
С&S на 1 машине(глупо, но для общей идеи сойдет). Существует(либо на диске, либо в адресном пространстве и С(напрямую), К(через дескриптор, пер.окружения, событие итд.)) защищенная очередь сообщений. Формат сообщения:
--Свой идентификатор/
--Дескритор сервера(процесса его)/
--инфа, кот надо передать.
К может обращаться к этой очереди и ставить туда сообщения, процесс(поток) сервера спит,когда сообщение поставлено очередь пинает Сервер, тот выделяет для своих нужд очередь и поток, рассылающий всем инфу. Если при попытке поставить в очередь новый элемент выясняется, что очередь занята(например, Через TryEnterCriticalSection()--адресное пространство то одно), то образуется еще 1 очередь, на которую передается управление по выполнению первой. Пример в принципе рабочий(я парименял его для того, чтобы 200 диффуров решались на 1 компе, когда им это надо и зачем им это надо.) Потом друган развил эту идею до локальной сети(Очередь1 просто брала(Очередь2 посылала через ТСР(????????)) данные из соответсующих портов--небольшой дров под винду98(по-моему, даже без наворотов а на асме.))Используя такой формат.
вОТ. С уважением.





PM MAIL   Вверх
Fantasist
Дата 25.3.2004, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



DenDen
Цитата
DenDenДата 25.3.2004, 18:42


Зачем в такой задаче очередь? Очередь нужна там, где нужна последовательность обработки или синхронизация асинхронно возникающих событий. Здесь вполне можно для каждого клиента выделять отдельный поток и работать с ним в реальном времени.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0879 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.