Непонимаю, что я делаю неправильно. Мой сервер высылает пиксмап и позицию QPoint
void Server::sendToClient()
{
QTcpSocket *clientSocket = (QTcpSocket*)sender();
QByteArray arr;
QBuffer buffer(&arr);
buffer.open(QIODevice::WriteOnly);
QPixmap pix(200, 200);
pix.fill(Qt::red);
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << quint16(0) << arr << QPoint(23, 23);
out.device()->seek(0);
out << quint16(block.size() - sizeof(qint16));
clientSocket->write(block);
}
Клиент принимает данные от сервера в слоте
void Client::readyRead()
{
QDataStream in(_tcpSocket);
in.setVersion(QDataStream::Qt_4_0);
while(1) {
if (!_blockSize) {
if (_tcpSocket->bytesAvailable() < sizeof(quint16)) {
break;
}
in >> _blockSize;
}
if (_tcpSocket->bytesAvailable() < _blockSize) {
break;
}
QByteArray buf;
QPoint pt;
in >> buf >> pt;
_blockSize = 0;
}
}
Все работает пока пиксмап вписывается в один блок, но если изменить размер пиксма например 2000x2000, то клиент получает несколько пакетов и тут происходит самое интересное метод bytesAvailable() сообщает, что в сокет содержит данные, но из потока in ничего не считывается тоесть buf.size() после in >> buf >> pt; равно нулю. Но если вызвать из _tcpSocket вызвать метод read(buf, _tcpSocket->bytesAvailable()), то данные можно считать.
Я в шоке. Кто-нибудь уже сталкивался с такой проблемой?
Что я делаю неправильно? Подскажите пожалуйста