1

生のネットワーク バイトを QDataStream オブジェクトに繰り返し書き込むと、QDataStream は基になる QByteArray の書き込み位置を増やしません。

コードは次のとおりです。

QByteArray recvBuf;
int bytePosition = 0;

void init( ){
    recvBuf = QByteArray( 240 * 10, Qt::Uninitiliazed );
}

void receiveAppend( ){    
    QByteArray buffer( 240, Qt::Uninitialized );
    QDataStream datastream( recvBuf, QIODevice::WriteOnly );
    datastream.setByteOrder( QDataStream::LittleEndian );

    if( udpSocket->readDataGram( buffer.data(), buffer.size(), &ip, &port ){
        datastream.device().seek( bytePosition );
        datastream.writeRawData( buffer.data(), buffer.size() );
        bytePosition += 240;
    }
}

なぜこうなった?

コードは Linux Mint 18 64Bit で正常に動作します。ただし、Windows 10 64Bit では動作しません。
Qt 5.9.1 で Qt Creator 4.3.1 を使用しています。

4

0 に答える 0