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 ) :
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
));
}
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));
}
To copy to clipboard, switch view to plain text mode
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:
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;
}
void socketThread::writeData(Packet * packet)
{
if(Socket->state() == QAbstractSocket::ConnectedState)
{
qDebug() << "Type: " << packet->getType(); //
qDebug() << "Data: " << packet->getStringData();
QByteArray kuldendo;
*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;
}
To copy to clipboard, switch view to plain text mode
The client-side output without QThread::msleep(30) show :
---------------------
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"
---------------------
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"
To copy to clipboard, switch view to plain text mode
I use Qt 5.7 with Static mingw compiler.
(OS: Windows 10)
Bookmarks