Суть такая:
Есть некий объект, который выполняет свою работу и при этом промежуточные результаты высылает в виде сигналов:
C++ (Qt)
void foo()
{
while(true)
{
if (....)
emit Signal1(QString ID, QString param);
else if (....)
emit Signal2(QString ID, qint64 param1);
// etc
if (blabla)
break;
}
emit EndOfWork(QString ID, QString param3);
}
Есть QLocalServer который соединен своими слотами с вышеозначенным объектом, и все нормально до него доходит.
Он обрабатывает сигнал, формирует пакет для отправки и отправляет клиенту.
Общий код формирования пакетов, для каждого из сигналов он свой,но принцип один:
C++ (Qt)
void MyLocalServer::on_Signal1(QString ID, QString param)
{
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_6);
out << (qint8)STX; // 0x05
out << ID;
out << param;
out << (qint8)ETX; // 0x06
out.device()->seek(0);
serverSocket->write(block);
serverSocket->waitForBytesWritten();
}
К серверу подключается локальный клиент,который получает эти пакеты и обрабатывает.
Все пакеты нормально доходят до клиента, кроме последнего, который формируется на сигнал
emit EndOfWork(QString ID);
Однако, если послать после него еще какой либо пакет, то пакет сформированный на EndOfWork доходит нормально.
Получается что последний пакет где то "застревает" и его надо протолкнуть (flush()) использовал - не помогло.
Тоже самое делал и на Tcp сокетах - поведение одинаковое.
Причем поведение это проявляется только на машине заказчика (под виндой), на своих тестил в разных вариантах и под разными ОС (линух, винда) такого нет.
Что можно предпринять в данном случае?