QT设计的多客户端一个服务器多线程SOCKET问题
一个客户端打开即创建一个socket线程,这个没问题。
一个客户端发送一个动作,消息发给服务器,服务器进行解析,操作数据库,返回给客户端结果,客户端收到结果显示。
当客户端消息发出的间隔长,在发送第二个消息之前第一个消息服务器已经成功解析,那不影响第二个消息。
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readMessage()), Qt::DirectConnection);
当连续发两个信息,服务器会错乱,
A消息发到服务器,服务器成功执行readMessage(),处理A消息
A消息发完立刻发B消息,这时候服务器没有执行B消息的readMessage(),而问我在发送C消息后,才执行的B消息的readMessage()。
请问这是为什么,该怎么写才能避免错乱。
void SocketThead::run()
{
qDebug()<<"222";
tcpSocket = new QTcpSocket;
if (!tcpSocket->setSocketDescriptor(socketDescriptor))
{
emit error(tcpSocket->error());
return;
}
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readMessage()), Qt::DirectConnection);
exec();
}
void SocketThead::readMessage()
{
QDataStream in(tcpSocket);
if (blockSize == 0)
{
if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
{
return;
}
in >> blockSize;
}
if (tcpSocket->bytesAvailable() < blockSize)
{
return;
}
in >> theString;
qDebug()<<"recieve--------------------------------------\n"<<theString;
blockSize = 0;
qDebug()<<"\nrecieve--------------------------------------\n";
sendMessage();
}