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:
...
byteArray = file.readAll();
}
file.close();
socket->write(byteArray);
...
...
QByteArray byteArray;
QFile file("test.exe");
if(file.open(QIODevice::ReadOnly)) {
byteArray = file.readAll();
}
file.close();
socket->write(byteArray);
...
To copy to clipboard, switch view to plain text mode
Client side:
...
int bytesReceived = 0;
readyRead(){
if (tcpSocket->waitForReadyRead()) {
bytesReceived += (int)tcpSocket->bytesAvailable();
byteArray += tcpSocket->readAll();
qDebug() << byteArray.size();
qDebug
() <<
"recieved: " + QString::number(bytesReceived
);
updateFile
= new QFile("test.exe");
qDebug() << updateFile->write(byteArray);
}
}
...
...
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);
}
}
...
To copy to clipboard, switch view to plain text mode
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
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
To copy to clipboard, switch view to plain text mode
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
Bookmarks