Russian Qt Forum

Qt => Работа с сетью => Тема начата: sibmail от Май 26, 2010, 11:10



Название: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: sibmail от Май 26, 2010, 11:10
Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиентам.
берем пример из исходников qt3



Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: aarlan от Май 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();

}


Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: crossly от Май 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();

}

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


Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: aarlan от Май 26, 2010, 15:15
если задача такая стоит, то конечно список подключенных сохраняем, рассылать можно, например, при каждом новом подключении, или по таймеру


Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: sibmail от Май 26, 2010, 16:21
такой вариант подойдет только для вновь создаваемых подключений.... тебе нужно хранить список подключений... и при необходимости рассылать по этому списку
[/quote]

что именно надо сохранять? socket_id? или ip-адреса?


Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: crossly от Май 26, 2010, 16:26
главное указатель на сокет... а как ты их будешь различать (по ip, имени) это уже как тебе нравится... :)


Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: sibmail от Май 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() );

}


Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: crossly от Май 26, 2010, 16:59
взять что то вроде QList<QString, QSocket*> и писать туда ip и указатель на сокет при новом подключении .... и естественно удалять при отключении клиента.... вот и все....


Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: sibmail от Май 27, 2010, 04:48
взять что вроде того или вроде этого и сделать как бы так

кто-нибудь может написать ответ на поставленный вопрос?


Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: crossly от Май 27, 2010, 12:11
5$..... на этом форуме людям помогают, а не делают за них...


Название: Re: Qt3. Сервер с несколькими подключениями., Как разослать всем подключенным клиент
Отправлено: sibmail от Май 28, 2010, 05:07
5$..... на этом форуме людям помогают, а не делают за них...

ха! никто не шарит!!