Добрый день. Есть функция 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 ответов

40 просмотров

посмотри сам _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()); }

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта