被qsocket卡了一天,bug是無法讀寫,後來發現是因爲多綫程的原因:
void Client::Init()
{
socket_ = new QTcpSocket();
socket_->connectToHost("127.0.0.1",27015);
if(socket_->waitForConnected(1000)) {
qDebug()<<"cann't connect server\n";
// QThread::sleep(1);
// socket_->connectToHost("127.0.0.1",27015);
}
qDebug()<<"state is"<< socket_->state();
connect(socket_,&QTcpSocket::readyRead,this,[&](){
QByteArray buff = socket_->readAll();
qDebug()<<"get msg:"<<buff.size();
ParsingBuf(buff);
});
connect(socket_, &QAbstractSocket::disconnected,socket_, &QObject::deleteLater);
connect(socket_, &QAbstractSocket::errorOccurred,this,[&](QAbstractSocket::SocketError socketError){
switch (socketError) {
case QAbstractSocket::RemoteHostClosedError:
break;
case QAbstractSocket::HostNotFoundError:
qDebug()<<"The host was not found. Please check the host name and port settings.";
break;
case QAbstractSocket::ConnectionRefusedError:
qDebug()<<"The connection was refused by the peer. "
"Make sure the fortune server is running, "
"and check that the host name and port "
"settings are correct.";
break;
default:
qDebug()<<tr("The following error occurred: %1.").arg(socket_->errorString());
}
});
}
Init中初始化,並進行事件鏈接;
Main中多綫程:
Client client;
std::thread t_client = std::thread(&Client::Init,&client);
t_client.detach();
解決方法:去掉多綫程:
Client client;
client.Init();