Bez zbędnego rozpisywania.. problem przedstawiam bezpośrednio 'na kodzie':
we: "play" (QString)
wy: "play" (a otrzymuje pusty string... przy którejś tam próbie 'naprawienia' otrzymywałem przez moment kilka znaków zapytania..)
// klient
void Widget::ReceiveData()
{
// ta 'metoda' działa..
//QByteArray in = client.readAll();
//QString data(in);
// ta nie bardzo..
QDataStream in(&client);
in.setVersion(QDataStream::Qt_4_0);
if (dataSize == 0) { //dataSize - qint16
if (client.bytesAvailable() < (int)sizeof(quint16))
return;
in >> dataSize;
}
if (client.bytesAvailable() < dataSize)
return;
QString rec;
in >> rec;
qDebug() << rec;
}
// serwer
void Widget::SendData()
{
//to 'metoda' działa
//client->write("play",4);
//ta nie bardzo..
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << "play";
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
client->write(block);
client->disconnectFromHost();
client->waitForDisconnected();
}
Jeszcze dziwniejsze jest to, że kod jest 'praktycznie' przeklejony z przykładu Fortune ( http://qt-project.org/doc/qt-5/qtnetwork-fortuneclient-example.html ) i ten przykład działa jak należy.. -.-
Lucas DarkstormQDataStream
do odbierania / wysyłania dużych danych stosując sockety. Myślałem, że wystarczy właśnie samoread
/write
. Aż muszę doczytać o tej klasie ;).