QTcpSocket - попробуйте отправить кучу запросов - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь отправить 2 запроса по одному одновременно.Мой код следующий (это пример кода):

QTcpSocket client;
...
client->write(block);
client->write(block);

Проблема следующая.Сервер получает только первый запрос.Второго запроса нет.Я понюхал с помощью wireshark и вижу, что в пакетах tcp нет второго запроса.

Что я должен сделать, чтобы отправлять много запросов через QTcpSocket один за другим?

UPD Я вставил qDebug() << this->bytesAvailable() << "bytes"; на сервер в readyRead () и qDebug() << this->bytesToWrite(); после каждого client->write(block); в клиенте.Кроме того, я добавил это к клиенту:

connect(this, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten(qint64)));

void Connection::bytesWritten(qint64 count)
{
    qDebug() << count << "bytes written";
}

Я посылаю константу ORDER_STATUS_GET_LIST в первом запросе и ORDER_GET_LIST во втором.Я добавил вывод данных на сервер.Я получил первую команду.

Есть список вывода:

Клиент:

Sending ORDER_STATUS_GET_LIST 
11 bytes to write 
Sending ORDER_GET_LIST 
68 bytes to write
68 bytes written

Сервер:

68 bytes 
ORDER_STATUS_GET_LIST received

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Согласно документации, вам необходимо flush() сокет, ЕСЛИ вы не вернетесь в цикл обработки событий между несколькими записями.

Правильным решением было бы буферизовать ваши блоки, например, в QByteArray и отправить буфер сразу.

QTcpSocket client;
QByteArray buffer;
...
buffer << block;
buffer << block;
client->write(buffer);
1 голос
/ 16 марта 2012

Я нашел решение сам. Я думаю, что это кому-то тоже нужно.

Решение простое:

QTcpSocket client;
...
client->write(block); 
client->flush();
client->write(block);
client->flush();

Нам нужно сбросить буфер сокета qt в net, прежде чем заполнять его другими данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...