Как читать полные данные, используя QTcpSocket (Qt4.7) - PullRequest
1 голос
/ 28 января 2020

Я создал TcpServer для получения данных от клиента. Клиент отправляет много сообщений, и я хотел бы их прочитать. Пока что мой TcpServer. cpp выглядит так:



void TcpServer::serverStart()
{
    server = new QTcpServer(this);
    if (!server->listen(QHostAddress("192.168.x.x"), 48583))
    {
        qDebug() << "Not listening";
        server->close();
        delete server;
        return;
    }
    else {
        qDebug() << "Listening";
    }

connect(server, SIGNAL(newConnection()), this, SLOT(newConnection()));


}



void TcpServer::newConnection()
{

    socket = server->nextPendingConnection();
    qDebug() << "Client connected";

    connect(socket, SIGNAL(readyRead()), this, SLOT(getData()));
    connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
}


void TcpServer::getData()
{

QByteArray buffer;

while (socket->bytesAvailable())
    {
        buffer.append(socket->readAll());
       }
qDebug() << buffer;
    }




void TcpServer::serverStop()
{
    server->close();
    delete server;
}

Я знаю, что моей функции getData нужно гораздо больше, чтобы получить все, но я не понимаю, какие шаги необходимы для этого. Если кто-то мог бы дать мне несколько советов, я был бы благодарен!

1 Ответ

0 голосов
/ 28 января 2020

TCP - это транспортный протокол, ориентированный на поток. Представьте, что это непрерывный поток данных. TCP еще не определил ни одного сообщения, потому что опять это непрерывный поток данных.

Я беру из вашего комментария, что вы не используете какой-либо протокол прикладного уровня. Вам нужен протокол прикладного уровня, такой как, например, http, который затем определяет «сообщения» и дает вам дальнейшие инструкции о том, как прочитать полное сообщение.

...