【发布时间】:2017-12-18 08:09:38
【问题描述】:
客户端应用程序通过 QTcpSocket 向服务器发送两个(ushort)数字:
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..
- 有趣:如果我只写 一个 数字而不是两个数字,它确实有效!
知道我做错了什么吗?
【问题讨论】:
-
如果你在 'socket->read(bytes)' 之后
qDebug() << buffer;输出是什么?虽然我认为缺少;不会导致编译错误;D.
标签: c++ qt qtcpsocket