Russian Qt Forum
Май 19, 2024, 00:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Многопользовательский чат с удаленным доступом  (Прочитано 11291 раз)
AlexV_K
Гость
« : Май 12, 2008, 11:39 »

Доброго времени суток всем!

Встал вопрос о написании многопользовательского чата (подобие mirk) с использованием QTcpServer - отдельное приложение в виде сервера и QTcpSocket - отдельное клиентское приложение (окно чата и т.п.). Сначала в целях изучения сделал сервер и клиента для сообщений тет-а-тет, то есть только для одного пользователя и сервера. Далее начал продумывать как сделать многопользовательское общение. Мне показалось очевидным, хранить входящие на сервер сокеты (клиенты) в неком контейнере, а затем  пробегать контейнер и записывать в эти сокеты необходимую информацию, например: при подключении очередного пользователя к серверу отсылать ему свое имя (login) и записывать сокет (клиента) в контейнер, затем сервер должен пройтись по контейнеру и разослать всем клиентам этот login.

Код:
static QList<QTcpSocket*> m_peers;

..................................................

void cServer::incomingConnection(int socketId)
{
  QTcpSocket* tcpSocket = new QTcpSocket();
  tcpSocket->setSocketDescriptor(socketId);

  m_peers.append(tcpSocket); // добавить входящий сокет в контейнер
}

затем в нужный момент пробежаться по содержимому QList, например после прочтения tcpSocket, login от клиента

void SendFunction()
{
   //подготовка данных QByteArray к отправке по сокету: block (по сути тот же самый login с префиксом для обработки сообщения)

   for (int i=0; i < m_peers.size(); i++)
   {
     m_peers->write(block);
   }
}

Но этот вариант не работает, не доходит до клиентов сообщение, кроме того что текущий в incomingConnection()... Скажите пожалуйста, что неправильно, в какую сторону копать вообще, если есть литература, примеры ссылочки на статьи и тому подобное, буду очень признателен.
Заранее благодарен!
Записан
crocus
Гость
« Ответ #1 : Май 12, 2008, 13:17 »

Посмотри на KVirс.
Записан
IMPOMEZIA
Гость
« Ответ #2 : Май 12, 2008, 13:24 »

examples/network/chat/
Записан
AlexV_K
Гость
« Ответ #3 : Май 12, 2008, 13:35 »

IMPOMEZIA, жаль но этот пример не разделен на сервер и клиента как автономные приложения и он не с удаленным доступом... смотрел внимательно на него но он не подходит Грустный
Записан
AlexV_K
Гость
« Ответ #4 : Май 12, 2008, 14:42 »

KVirc смотрю... правда много коду там, эх мне бы концептуально... как эти дела реализовывать...
Записан
ритт
Гость
« Ответ #5 : Май 12, 2008, 14:49 »

честно говоря, что такое квирк не знаю Улыбающийся
концептуально можно подглядеть здесь http://www.kde-apps.org/content/show.php/QChat?content=65066
Записан
AlexV_K
Гость
« Ответ #6 : Май 13, 2008, 08:00 »

Константин, спасибо! Встречал в сети этот чат, но он был без сервера, как оказалось разработчик начал реализацию клиент-серверной архитектуры - как раз то что мне нужно. Строит глазки
Записан
AlexV_K
Гость
« Ответ #7 : Май 14, 2008, 13:31 »

Единственный минус, что он для локального использования, вот думаю как с адаптировать к удаленному использованию... если это вообще возможно?
Записан
ритт
Гость
« Ответ #8 : Май 14, 2008, 14:12 »

а какая архитектура должна быть у чата?
можно посмотреть в сторону джаббера и т.п. - есть и клиенты, и сервера на кутях
Записан
AlexV_K
Гость
« Ответ #9 : Май 15, 2008, 13:12 »

КОНСТАНТИН, хотелось бы архитектуру чата, подобную mirk, jabber, чтобы был удаленный сервер и множество удаленных клиентов. Был бы признателен если бы Вы подсказали что можно поглядеть поэтому поводу на qt с использованием QTcpSocket и QTcpServer, много чего перебрал, но так и не нашел подходящего Грустный. Заранее благодарен!
Записан
ритт
Гость
« Ответ #10 : Август 11, 2008, 11:50 »

случайно наткнулся на эту тему...и не помню - отвечал ли я после сообщения от 15-го мая (может, в личку?)
АлексВ_К, если вопрос  ещё актуален, дай знать. если решение уже нашёл самостоятельно, напиши здесь хотя бы вкратце - думаю, вопрос ещё всплывёт в будущем...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 17.