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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент  (Прочитано 5453 раз)
sibmail
Гость
« : Май 26, 2010, 11:10 »

Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиентам.
берем пример из исходников qt3

« Последнее редактирование: Май 27, 2010, 06:48 от sibmail » Записан
aarlan
Гость
« Ответ #1 : Май 26, 2010, 14:45 »

переписываешь метод Q3ServerSocket::newConnection
Код:
void newConnection( int socket ) {

  Q3Socket socketForClient;
  socketForClient.setSocket( socket );
  socketForClient.open( QIODevice::WriteOnly );
  QByteArray message;  // сообщение, которое нужно отправить
  socketForClient.write( message );
  socketForClient.close();

}
Записан
crossly
Гость
« Ответ #2 : Май 26, 2010, 14:48 »

переписываешь метод Q3ServerSocket::newConnection
Код:
void newConnection( int socket ) {

  Q3Socket socketForClient;
  socketForClient.setSocket( socket );
  socketForClient.open( QIODevice::WriteOnly );
  QByteArray message;  // сообщение, которое нужно отправить
  socketForClient.write( message );
  socketForClient.close();

}

такой вариант подойдет только для вновь создаваемых подключений.... тебе нужно хранить список подключений... и при необходимости рассылать по этому списку
« Последнее редактирование: Май 26, 2010, 15:17 от crossly » Записан
aarlan
Гость
« Ответ #3 : Май 26, 2010, 15:15 »

если задача такая стоит, то конечно список подключенных сохраняем, рассылать можно, например, при каждом новом подключении, или по таймеру
Записан
sibmail
Гость
« Ответ #4 : Май 26, 2010, 16:21 »

такой вариант подойдет только для вновь создаваемых подключений.... тебе нужно хранить список подключений... и при необходимости рассылать по этому списку
[/quote]

что именно надо сохранять? socket_id? или ip-адреса?
Записан
crossly
Гость
« Ответ #5 : Май 26, 2010, 16:26 »

главное указатель на сокет... а как ты их будешь различать (по ip, имени) это уже как тебе нравится... Улыбающийся
Записан
sibmail
Гость
« Ответ #6 : Май 26, 2010, 16:38 »

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

напишите, пожалуйста, в виде кода,  то не совсем понимаю как сохранить список указателей на сокет
например, у меня следующий код для новых подключений
Код:
void MyServer::newConnection(int nSocketId)
    {
        socket = new QSocket(this);
        socket->setSocket(nSocketId);
        connect(socket, SIGNAL(delayedCloseFinished()), SLOT(slotConnectionClosed()));
        connect(socket, SIGNAL(readyRead()), SLOT(slotReadClient()));
    }   
и код для чтения данных
Код:
void MyServer:: slotReadClient()
{
    QSocket* socket = (QSocket*)sender();
    QCString rcv_str_from_up;
    rcv_str_from_up.resize(socket->bytesAvailable() + 1 );
    socket->readBlock( rcv_str_from_up.data(), socket->bytesAvailable() );

И ВОТ ЗДЕСЬ НАДО РАЗОСЛАТЬ  ТИПА  пробежать по списку подключений и socket->writeBlock(rcv_str_from_up,rcv_str_from_up.length() );

}
Записан
crossly
Гость
« Ответ #7 : Май 26, 2010, 16:59 »

взять что то вроде QList<QString, QSocket*> и писать туда ip и указатель на сокет при новом подключении .... и естественно удалять при отключении клиента.... вот и все....
Записан
sibmail
Гость
« Ответ #8 : Май 27, 2010, 04:48 »

взять что вроде того или вроде этого и сделать как бы так

кто-нибудь может написать ответ на поставленный вопрос?
Записан
crossly
Гость
« Ответ #9 : Май 27, 2010, 12:11 »

5$..... на этом форуме людям помогают, а не делают за них...
Записан
sibmail
Гость
« Ответ #10 : Май 28, 2010, 05:07 »

5$..... на этом форуме людям помогают, а не делают за них...

ха! никто не шарит!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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