最近做一个项目用wifi连接服务器,我做的tcp客户端,用的是wpa_supplicant。
关闭wifi开关,此时客户端没有连服务器,服务器重启后再打开wifi开关,可以连上服务器。
打开wifi开关,连上服务器,这时服务器重启,就怎么也连不上了,此时打印QTcpSocket状态一直是ConnectingState。
主要部分代码如下:
ptcpsocket_ = new QTcpSocket(this);
connect(ptcpsocket_, SIGNAL(readyRead()), SLOT(NewDataRecieved()));
connect(ptcpsocket_, SIGNAL(connected()), SLOT(ClientConnected()));
connect(ptcpsocket_, SIGNAL(disconnected()), SLOT(ConnectionClosedByServer()));
connect(ptcpsocket_, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(NetWorkErrorRecieved(QAbstractSocket::SocketError)));
void NetworkOperation::ConnectionClosedByServer(void)
{
qDebug()<<"DisconnectWithServer";
ptcpsocket_->abort();//close();
connected_flag_ = false;
SystemConfig::Instance()->Systemsetting()->SetServerState(false);
PostConnectEvent(false);
}
GUI在收到PostConnectEvent发出的事件后再启用定时器连服务器,执行以下函数
int NetworkOperation::ConnectToServer(const QString &server_ip, int port)
{
if(UnConnectedServer())
{
qDebug()<<"00";
ptcpsocket_->connectToHost(server_ip, port);
return 0;
}
else if(ConnectedServer())
{
qDebug()<<"22";
return 2;
}
else
{
qDebug()<<"11"<<ptcpsocket_->state();
return 1;
}
}
打印出的结果一直是11 ConnectingState,而且error信号连接的槽函数也无打印信息,不思不得其解