Добрый день. Есть функция void StateClient::sendData(const qint8 state){

if (client_socket->state() == QAbstractSocket::ConnectedState){
qDebug()<<"send data: state: " << state << " service_name: " << _service_name;
QByteArray send_bytes = QByteArray().append(state).append(_service_name);
client_socket->write(send_bytes);
client_socket->waitForBytesWritten();
}
}

Которая вызывается с достаточно большой частотой. По какой то причине непонятной для меня _service_name туда записывается множество раз. В чем может быть причина?

16 ответов

22 просмотра

посмотри сам _service_name через тот же qDebug() здесь же.. может не там траблу ищешь, может у тебя _service_name меняется?

DI- Автор вопроса
Angry Subst
посмотри сам _service_name через тот же qDebug() з...

_service_name - константа, которая читается из конфиг файла, поэтому дело не в этом уверен

Прочитайте NOTE на всякий случай https://doc.qt.io/qt-5/qabstractsocket.html#waitForBytesWritten

DI
_service_name - константа, которая читается из кон...

Если читается из какого-то файла и записывается в _service_name, то как _service_name может быть константой? Может быть ты где-то еще меняешь

А как ты определил, что множество раз записывается? Ты записал в буфер state, service_name и отправил в сокет. На том конце принял state, service_name. А как ты отличаешь одну посылку от другой? И какой тип имеет _service_name?

Mr.Mait
Если читается из какого-то файла и записывается в ...

+ но он имеет ввиду, что только из конфига достается и больше не трогает его вообще

Mr.Mait
Без полноценного кода верить нельзя)

ну разве что глянуть, не вызывается ли чтение конфига больше одного раза. Может там m_service_name.append(данные_из_конфига) и вызывается несколько раз а append - коварная штука

Angry Subst
ну разве что глянуть, не вызывается ли чтение конф...

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

DI
_service_name - константа, которая читается из кон...

да, кстати у тебя с каждой посылкой приписывается _service_name или конечное их количество?

Anatoly Shirokov
Там все хуже. Чтобы записать строку в сокет надо л...

я так понимаю, он проверяет посылку перед отправкой и она у него не соответствует его конструкции QByteArray().append(state).append(_service_name)

DI- Автор вопроса
Angry Subst
да, кстати у тебя с каждой посылкой приписывается ...

один и тот же. он хранится в объекте SendState и отправляется каждый раз при посылке, для сопоставления на принимающей стороне

DI- Автор вопроса
Angry Subst
я так понимаю, он проверяет посылку перед отправко...

я проверяю на принимающей стороне. вместо одного service_name выдаётся произвольное количество

DI
я проверяю на принимающей стороне. вместо одного s...

а на момент отправки посылка выглядит нормальной? видимо, одна посылка не успела уйти, и пошла следующая WaitForBytesWritten This function blocks until at least one byte has been written on the socket and the bytesWritten() signal has been emitted у тебя программа пошла дальше выполняться, как только хотя бы один байт ушел в буфер из посылки. А ты сам говоришь, что посылка формируется довольно часто

DI
я проверяю на принимающей стороне. вместо одного s...

а как ты отличаешься один пакет state + service_name от другого? покажи код чтения

DI- Автор вопроса
Anatoly Shirokov
а как ты отличаешься один пакет state + service_na...

понятно. спасибо. тогда проблема в этом читаю все, что пришло и первый байт как байт пакета. while (socket->bytesAvailable() > 0){ result_array.append(socket->readAll()); }

Похожие вопросы

Обсуждают сегодня

40 тысяч в час / 3600 = 11,11 в секунду... Вам точно нужна очередь? (я просто не знаю "контекста") Такое количество запросов любое приложение замечательно "прожует" и не попер...
Igor Mitin
5
Всем салют, заинтересовался odoo, хотел бы поинтересоваться на счёт этой ERP , прогеры которые работают над проектами вы используете odoo как серверную платформу работая с RES...
⚔️
8
А как асинхрон иначе реализован? Пардон:)
Ivan K 🏄🏻‍♂️
6
вопрос: кто как решает вопрос с динамической подгрузкой скриптов для отдельных страниц с включенным turbo router?
Sergei Toroptsev
25
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Друзья, за кем?
Magic
12
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Это что теперь, любой бот сможет принимать платежи без ебли с юр лицами?
Lencore
8
Ой а правда когда vcard появился? Вообще отличали просто по иду
Magic
2
Не догоняю немного каким боком тут эппл Вот есть веб (мини) апп, который по факту веб сайт, просто в телеге веб вью и если там оплата, то нежно вот эти приседания?
e\\/gen
7
Карта сайта