Клиентское приложение отправляет на сервер через QTcpSocket два (укороченных) числа:
ushort MessageId = 4;
ushort MessageSize = 0;
socket->write((const char*) &MessageId, sizeof(ushort));
socket->write((const char*) &MessageSize, sizeof(ushort));
socket->waitForBytesWritten();
Сервер Приложение получает сообщение длиной 4 байта и помещает его в буфер QByteArray, а затем декодирует числа:
int bytes = socket->bytesAvailable();
QByteArray buffer = socket->read(bytes)
const char * messageIdBytes = buffer.mid(0, 2);
ushort messageId = (ushort)(*messageIdBytes);
const char * messageSizeBytes = buffer.mid(2, 4);
ushort messageSize = (ushort)(*messageSizeBytes );
qDebug() << QString("MessageId Bits: [%1], Value: [%2].").arg(QString::number(messageId, 2), QString::number(messageId));
qDebug() << QString("MessageSize Bits: [%1], Value: [%2].").arg(QString::number(messageSize, 2), QString::number(messageSize));
Это дает следующий вывод сервера: (я добавил пробелы для удобства чтения)
MessageId Bits: [1111 1111 1101 1101], Value: [65501].
MessageSize Bits: [1111 1111 1101 1101], Value: [65501].
- Проблема: вывод сервера должен получить MessageId 4 и MessageSize 0.
- Наблюдение: отправка разных значений от клиента даже не влияет на вывод сервера. Всегда этот странный номер 65501..
- Интересно: однако это работает, если я напишу только один номер вместо двух!
Любая идея, что я делаю неправильно?
qDebug() << buffer;
после 'socket-›read(bytes)'? хотя я думаю, что недостающая доза;
не вызывает ошибки компиляции ;D. - person a.tabatabaei   schedule 18.12.2017