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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как осуществить приём на сервере сразу со всех подключившихся клиентов?  (Прочитано 1677 раз)
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();
}
Так сервер работает, насколько я понимаю, поочерёдно принимая и отсылая все подключившимся обратно. Но что нужно сделать, чтобы я смог получить пакеты со всех клиентов и только потом отправить нужный пакет?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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