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