Russian Qt Forum

Qt => Работа с сетью => Тема начата: Sadovnik от Декабрь 01, 2011, 13:55



Название: Как осуществить приём на сервере сразу со всех подключившихся клиентов?
Отправлено: Sadovnik от Декабрь 01, 2011, 13:55
Здравствуйте! Возникла такая проблема:
есть клиенты, к примеру трое, которые посылают пакеты(каждый по одному ByteArray), сервер их принимает, обрабатывает как надо и получается один файл. потом он рассылается обратно клиентам.
Код
C++ (Qt)
SimpleChatServer::SimpleChatServer(QObject* parent) : QTcpServer(parent)
{
connect(this, SIGNAL(newConnection()), this, SLOT(addConnection()));
}
 
SimpleChatServer::~SimpleChatServer()
{
}
 
void SimpleChatServer::addConnection()
{
QTcpSocket* connection = nextPendingConnection();
connections.append(connection);
QBuffer* buffer = new QBuffer(this);
buffer->open(QIODevice::ReadWrite);
buffers.insert(connection, buffer);
connect(connection, SIGNAL(disconnected()), SLOT(removeConnection()));
connect(connection, SIGNAL(readyRead()), SLOT(receiveMessage()));
}
 
void SimpleChatServer::removeConnection()
{
QTcpSocket* socket = static_cast<QTcpSocket*>(sender());
QBuffer* buffer = buffers.take(socket);
buffer->close();
buffer->deleteLater();
connections.removeAll(socket);
socket->deleteLater();
}
 
void SimpleChatServer::receiveMessage()
{
    QTcpSocket* socket = static_cast<QTcpSocket*>(sender());
    QBuffer* buffer = buffers.value(socket);
    QBuffer* bufer[10];
    // missing some checks for returns values for the sake of simplicity
    qint64 bytes = buffer->write(socket->readAll());
    // go back as many bytes as we just wrote so that it can be read
    buffer->seek(buffer->pos() - bytes);
    foreach (QTcpSocket* connection, connections)
    {
        connection->write(buffer->buffer());
 
    }
    buffer->seek(0);
    buffer->buffer().clear();
}
Так сервер работает, насколько я понимаю, поочерёдно принимая и отсылая все подключившимся обратно. Но что нужно сделать, чтобы я смог получить пакеты со всех клиентов и только потом отправить нужный пакет?