QTcpsocket fast write data problem
I wrote the simple Tcp client-server app.
I have a Packet class, look like:
First 4 byte are the data type, and other are Data (QString) as Bytearray.
I have 3 threads.
Server -> User Manager -> Socket Thread.
So, when i try this ( for test ) :
Code:
for(int i = 0; i < 5;i++){
Packet * teszt1 = new Packet;
teszt1->setType(12);
teszt1->setData("Something data teszt1 packet")
Packet * teszt2 = new Packet;
teszt2->setType(21);
teszt2->setData("Something data teszt2 packet")
QMetaObject::invokeMethod(usersocket,
"writeData",Qt
::QueuedConnection,Q_ARG
(Packet
*,teszt1
));
QMetaObject::invokeMethod(usersocket,
"writeData",Qt
::QueuedConnection,Q_ARG
(Packet
*,teszt2
));
}
The package arrive ,but the teszt2 packet's type equal to the teszt1. (The data is different.)
BUT!!! When i add new line to my writeData method: QThread::msleep(30); It's work!
Why???
My writeData method:
Code:
void socketThread::writeData(Packet * packet)
{
{
qDebug() << "Type: " << packet->getType(); //
qDebug() << "Data: " << packet->getStringData();
*packet >> kuldendo;
QByteArray Packetsize
= Packet
::IntToArray(packet
->sizeOfPacket
());
Socket->write(Packetsize); //Sizeof(Packet type + Packet data)
Socket->write(kuldendo); //Packet type + Packet data
Socket->waitForBytesWritten();
QThread::msleep(30);
// <- without not work. }
delete packet;
}
The client-side output without QThread::msleep(30) show :
Code:
---------------------
Packet Type: 12
Packet Data: "Something data teszt1 packet"
---------------------
NEW MESSAGE FROM SERVER
---------------------
Packet Type: 12
Packet Data: "Something data teszt2 packet"
---------------------
NEW MESSAGE FROM SERVER
---------------------
Packet Type: 12
Packet Data: "Something data teszt1 packet"
---------------------
NEW MESSAGE FROM SERVER
---------------------
Packet Type: 12
Packet Data: "Something data teszt2 packet"
---------------------
NEW MESSAGE FROM SERVER
---------------------
Packet Type: 12
Packet Data: "Something data teszt1 packet"
---------------------
NEW MESSAGE FROM SERVER
---------------------
Packet Type: 12
Packet Data: "Something data teszt2 packet"
---------------------
NEW MESSAGE FROM SERVER
---------------------
Packet Type: 12
Packet Data: "Something data teszt1 packet"
---------------------
NEW MESSAGE FROM SERVER
---------------------
Packet Type: 12
Packet Data: "Something data teszt2 packet"
---------------------
NEW MESSAGE FROM SERVER
---------------------
Packet Type: 12
Packet Data: "Something data teszt1 packet"
---------------------
NEW MESSAGE FROM SERVER
---------------------
Packet Type: 12
Packet Data: "Something data teszt2 packet"
I use Qt 5.7 with Static mingw compiler.
(OS: Windows 10)
Re: QTcpsocket fast write data problem
Have you verified that the problem is on the writing side not on the reading side?
Cheers,
_
P.S.: any specific reason for such a complicated setup?