scarecr0w132
18th October 2013, 09:45
Hello,
I am trying to send an EXE file over QTcpSocket, but it comes back with the wrong data.
I have researched and think it is because it only is getting the first "packet"?
I'm new to Tcp sockets should I use QDataStream?
Server side:
...
QByteArray byteArray;
QFile file("test.exe");
if(file.open(QIODevice::ReadOnly)) {
byteArray = file.readAll();
}
file.close();
socket->write(byteArray);
...
Client side:
...
int bytesReceived = 0;
readyRead(){
QByteArray byteArray;
if (tcpSocket->waitForReadyRead()) {
bytesReceived += (int)tcpSocket->bytesAvailable();
byteArray += tcpSocket->readAll();
qDebug() << byteArray.size();
qDebug() << "recieved: " + QString::number(bytesReceived);
updateFile = new QFile("test.exe");
if(updateFile->open(QIODevice::WriteOnly)) {
qDebug() << updateFile->write(byteArray);
}
}
...
Output:
87600
"recieved: 87600"
87600
131072
"recieved: 218672"
131072
131072
"recieved: 349744"
131072
131072
"recieved: 480816"
131072
131072
"recieved: 611888"
131072
131072
"recieved: 742960"
131072
131072
"recieved: 874032"
131072
131072
"recieved: 1005104"
131072
131072
"recieved: 1136176"
131072
129488
"recieved: 1265664"
129488
test.exe in written to file but is 129,488 bytes when it should be 1265664.
So server writes the correct data to client but client interprets it wrong?
Thank you for any help
I am trying to send an EXE file over QTcpSocket, but it comes back with the wrong data.
I have researched and think it is because it only is getting the first "packet"?
I'm new to Tcp sockets should I use QDataStream?
Server side:
...
QByteArray byteArray;
QFile file("test.exe");
if(file.open(QIODevice::ReadOnly)) {
byteArray = file.readAll();
}
file.close();
socket->write(byteArray);
...
Client side:
...
int bytesReceived = 0;
readyRead(){
QByteArray byteArray;
if (tcpSocket->waitForReadyRead()) {
bytesReceived += (int)tcpSocket->bytesAvailable();
byteArray += tcpSocket->readAll();
qDebug() << byteArray.size();
qDebug() << "recieved: " + QString::number(bytesReceived);
updateFile = new QFile("test.exe");
if(updateFile->open(QIODevice::WriteOnly)) {
qDebug() << updateFile->write(byteArray);
}
}
...
Output:
87600
"recieved: 87600"
87600
131072
"recieved: 218672"
131072
131072
"recieved: 349744"
131072
131072
"recieved: 480816"
131072
131072
"recieved: 611888"
131072
131072
"recieved: 742960"
131072
131072
"recieved: 874032"
131072
131072
"recieved: 1005104"
131072
131072
"recieved: 1136176"
131072
129488
"recieved: 1265664"
129488
test.exe in written to file but is 129,488 bytes when it should be 1265664.
So server writes the correct data to client but client interprets it wrong?
Thank you for any help