Russian Qt Forum

Qt => Работа с сетью => Тема начата: AlexV_K от Май 12, 2008, 11:39



Название: Многопользовательский чат с удаленным доступом
Отправлено: 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()... Скажите пожалуйста, что неправильно, в какую сторону копать вообще, если есть литература, примеры ссылочки на статьи и тому подобное, буду очень признателен.
Заранее благодарен!


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: crocus от Май 12, 2008, 13:17
Посмотри на KVirс.


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: IMPOMEZIA от Май 12, 2008, 13:24
examples/network/chat/


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: AlexV_K от Май 12, 2008, 13:35
IMPOMEZIA, жаль но этот пример не разделен на сервер и клиента как автономные приложения и он не с удаленным доступом... смотрел внимательно на него но он не подходит :(


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: AlexV_K от Май 12, 2008, 14:42
KVirc смотрю... правда много коду там, эх мне бы концептуально... как эти дела реализовывать...


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: ритт от Май 12, 2008, 14:49
честно говоря, что такое квирк не знаю :)
концептуально можно подглядеть здесь http://www.kde-apps.org/content/show.php/QChat?content=65066


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: AlexV_K от Май 13, 2008, 08:00
Константин, спасибо! Встречал в сети этот чат, но он был без сервера, как оказалось разработчик начал реализацию клиент-серверной архитектуры - как раз то что мне нужно. ::)


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: AlexV_K от Май 14, 2008, 13:31
Единственный минус, что он для локального использования, вот думаю как с адаптировать к удаленному использованию... если это вообще возможно?


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: ритт от Май 14, 2008, 14:12
а какая архитектура должна быть у чата?
можно посмотреть в сторону джаббера и т.п. - есть и клиенты, и сервера на кутях


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: AlexV_K от Май 15, 2008, 13:12
КОНСТАНТИН, хотелось бы архитектуру чата, подобную mirk, jabber, чтобы был удаленный сервер и множество удаленных клиентов. Был бы признателен если бы Вы подсказали что можно поглядеть поэтому поводу на qt с использованием QTcpSocket и QTcpServer, много чего перебрал, но так и не нашел подходящего :(. Заранее благодарен!


Название: Re: Многопользовательский чат с удаленным доступом
Отправлено: ритт от Август 11, 2008, 11:50
случайно наткнулся на эту тему...и не помню - отвечал ли я после сообщения от 15-го мая (может, в личку?)
АлексВ_К, если вопрос  ещё актуален, дай знать. если решение уже нашёл самостоятельно, напиши здесь хотя бы вкратце - думаю, вопрос ещё всплывёт в будущем...