Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QTcpSocket & QTcpServer, отправка информации 
:(
    Опции темы
SpAwN3D
Дата 22.4.2012, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мультипоточный сервер который получая информацию от одного клиента должен отослать её всем клиентам, собственно всё вроди работает одно только не могу понять как отослать всем клиентам. Пример ниже как сервер получает от клиента информацию и отправляет её (ему же). 
Код

void Thread::readyRead()
{
    QByteArray Data = socket->readAll();
    socket->write(Data);
    Data.clear();
}


Пробовал сохранять сокеты в QList при их создании(run()) и потом отправлять каждому, но ничего у меня не вышло, что посоветуете?
Код

void Thread::run()
{
    socket = new QTcpSocket(server1.server->nextPendingConnection());
    if(!socket->setSocketDescriptor(this->socketDescript))
    {
        emit error(socket->error());
        return;
    }
    connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()),Qt::DirectConnection);
    connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()),Qt::DirectConnection);
    exec();
}


Это сообщение отредактировал(а) SpAwN3D - 22.4.2012, 17:29
PM ICQ   Вверх
boostcoder
Дата 22.4.2012, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



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

PM WWW   Вверх
SpAwN3D
Дата 23.4.2012, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Создал вот такую структуру что бы помещать в неё сокеты
Код

struct user
{
    QTcpSocket *socketUser;
    bool exist;
    user *next;
    user()
    {
        exist = false;
    }
};

И вот так изменил run() и readyRead() что бы когда создавался сокет то он помещался в конец структуры, а когда отправляется информация то она по сути должна отправляться всем клиентам, но никакого изменения нету. сообщение получает только один клиент, тот который отправляет. Что не так с этой частью кода, я что-то не так делаю?
Код

void Thread::run()
{
    socket = new QTcpSocket(server1.server->nextPendingConnection());
    if(!socket->setSocketDescriptor(this->socketDescript))
    {
        emit error(socket->error());
        return;
    }
    //
    users = &mserv.usersRoot;
    while(users->exist)
    {
        users = users->next;
    }
    users->socketUser = socket;
    users->exist = true;
    users = users->next = new struct user;
    //
    connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()),Qt::DirectConnection);
    connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()),Qt::DirectConnection);
    exec();
}

void Thread::readyRead()
{
    QByteArray Data = socket->readAll();
    users = &mserv.usersRoot;
    while(users->exist)
    {
        users->socketUser->write(Data);
        users = users->next;
    }
    Data.clear();
}

PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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