Cliente Qt - conecte-se ao servidor C
Pergunta
Estou tentando criar um cliente que deve se conectar a um servidor C.Devo usar TCP.Já tenho um servidor totalmente funcional, mas não consigo conectar meu cliente.Não quero enviar nenhum dado ao servidor (neste momento).Só quero estabelecer uma conexão e abrir uma nova caixa de diálogo.
Aqui está o código no slot Void Login::on_pushButton_clicked().// pushButon é meu botão de login
pSocket = new QTcpSocket (this);
connect (pSocket, SIGNAL(readyRead()), SLOT(waitNextStep()));
pSocket->connectToHost(ui->lineEdit->text(), ui->lineEdit_2->text().toInt());
if(pSocket->waitForConnected())
{
Menu mMenu;
mMenu.setModal(true);
mMenu.exec();
}
else
{
QMessageBox::critical(this,tr("Error"),tr("Error at Connect"));
}
Já defini a classe Menu e sei que está funcional pois testei sem a parte de conexão.A parte de busca de IP do lineEdits também é funcional.O pSocket é declarado na classe Login, como um membro privado (QTcpSocket *pSocket;).
Infelizmente, sou novo no QT e realmente não sei o que a função 'waitNextStep ()' deve conter.Acabei de fazer um retorno 1;Não tenho certeza sobre o SLOT na função de conexão, pois notei em muitos exemplos que havia funções diferentes ali.
Se eu executar o programa, não recebo erros e o programa é executado perfeitamente.Mas quando clico no botão de login, a caixa de diálogo congela por cerca de 15 segundos - ela não responde.Depois disso, recebo a mensagem 'Erro ao conectar'.Qualquer ajuda será muito apreciada.
Solução
Infelizmente, sou novo no QT e realmente não sei o que a função 'waitNextStep ()' deve conter.Acabei de fazer um retorno 1;Não tenho certeza sobre o SLOT na função de conexão, pois notei em muitos exemplos que havia funções diferentes ali.
Depende muito do seu caso de uso, mas geralmente é o manipulador dos dados recebidos, o que você deseja fazer com eles, incluindo potencialmente armazená-los em uma variável de membro no momento.
Se eu executar o programa, não recebo erros e o programa é executado perfeitamente.Mas quando clico no botão de login, a caixa de diálogo congela por cerca de 15 segundos - ela não responde.Depois disso, recebo a mensagem 'Erro ao conectar'.Qualquer ajuda será muito apreciada.
É porque if(pSocket->waitForConnected())
é o bloqueio (ou seja,sync) uso da operação assíncrona do Qt.O que eu sugeriria fazer é conectar-se ao sinal conectado conforme documentação:
void QAbstractSocket::connected() [sinal]
Este sinal é emitido após connectToHost() ter sido chamado e uma conexão ter sido estabelecida com sucesso.
Observação:Em alguns sistemas operacionais, o sinal conectado() pode ser emitido diretamente da chamada connectToHost() para conexões com o host local.